C语言泡排冒序算浅析

法中刘旭 (

江师范丽等专高学科校数与计算机学科学系 )

摘】要泡冒排序算法 C语言常见是排序算法之,一该算法的优点

逻辑是清晰,代码简洁,点缺是时复杂度间高较本文介。绍了统传

0

。每一轮较结束后比,如标果识量变的值为 l,则说明有发没生

数据换交,排序已完经成,不用继续再比较;如果标变量识的为值0,

冒泡排序算

法的基思本想,并算对的改法进行分进析,已降该低

法算的时间复杂度。

说则排明可序未能成,完需进还下一行的比较轮改进后的。算如法下

: u i。d b ub b l P

5rI

—。

be tt e r (in t a[】。i n t n)I I为数na组元的素个数

键关字】 c语言,法,冒算排泡

序 1.引言

f

0r i(咄 i (n -1 i;+ .】

Fla=1g/;/置标识设变薰并赋值为1 F

o (r j= 0;< j一 n1一i;j+ ’){

c语言的习学中,学习完程在设计序结以后,构就会遇到 于排序关的问题。常见的排序算有法冒泡序排选、排序择、插入排序、快排速和归序排序并等排序法算本文。主要对统传冒的排序泡法算的算逻辑法和算法实现等进分析,对行传统法算不中必要的循环进行了进改,一在程度定减了算少法循的环次数数据和交换次 ,数从而降了算法的低间时杂度复。 2传.统的冒排序泡算法

i F([ a】> j【aj + l】 )

{

F l a g=日;,,在数据变存,标换变量识赋值日

为te pI; a j【】; a【 1 j a【 j+ 1 】 a【 J+ 1;】 tem p:

}

“} l a g= =

;1

’; 藁榘裾杂鲁 藜譬数 交据换排,序已完成

泡排冒序法算对两相个的数邻进行比较,小较的数“浮”上较, 3 . 每2一轮比较找到当前最大的数,时同时 找当到前的最小大的数“下沉”,对参 比较加的 两相个邻的数据而言, 果如前一个 数比数后一个大,则数交换这个两;数则不用否换交对每一对。相的邻以的两上个算法中,在 一每轮相的邻两数比较 时,都是 第从一两个数进行完次比一后较,最后一个的就数是最的大数,接下来对相对邻数两

中找到较大数,每轮比一较找到只当前比范围的较最除去最一后个数其的他数再次进每一行对相邻的两数个的较比,数。如大果同能时找当前到较比围范的最数,小率可效以高提一最的后数是第便二的大数如果有。n个元素数组的[ a]:n ,倍循环数也可次以大幅减,少相于当在同轮的比较中一,到找一 第一轮逐,个比较 ( [ a1],a[ 2 )], ( [a2] , a[3] ),( a[3], a[ 4] , )个最大‘下沉 到最”后,同时 到找一个最小“数浮上”到最前面。具( a[n— i] a, n] )[最:大 元的素被会移动到 aI ] n上第二。,轮逐体法为:方在找到当轮前比较的大数最后,在进行下一比轮较之个比 ( a较[1] a,[ 2]) ( a,[ 2],a []3), ( a[ 3], a[ 4 )],…,… (a [ n 2], a前从当,轮排前序围范最的后一对邻相的两开始数行相进邻数两[n一 1] );第二大元素会被移到动 a[ n— i] 上以此类,推 ,经过n —I轮的较,比将每次比较结中的果较数小向存前,放直到把最小数把

…交

,

比后,较这个n数序排功成。法算码代如下:v

o i d ub b lb e

换到第一个位

置原理,和到最大找数存放到最一样后然后根据,标 识变量值判断的是否始开进行下一轮的比较。改进后的法如算下:

ouid bu bbl e

—s

o rt i ( tn a 1 . i n t n l) l n示表教a组的元个数黉

i - O; i

s

0

b e t ter ( i n t a[ 】,i n t n //)n为数组 a的元个数

{素

{

F o r( i=:0 i

F

o r (

{

,

,每—轮 b鞍前n一E1 - i个 p胡邑}痔好的最i后个不E用 较

FO (r

{ {

fD r g ( j =。 0;; j n驾一( 1要 1一考; j” )莠/ 蓣, 从第堡一对始开比始较, 到最拭大值

{

J

-o; j

i F(a[ 1ja>【J 1+ l】{

i

f ( a[J>】a J[+ l 1 't

e mp-£ j】; af j 1 [ aJ *lk

F la;g; 0//存在据数换变标,变量赋识为值 0

t me p a【 j】; a j【】= a【j 1】+ a【;j’ 1】一 t em p;

'

k n=一1- i:

a( J+ l l- t e砷

};’ ’

Fi( a[ k] a

{

小l F a=g0;

}

3算.的法改进 3 . 若排1序提前完 成,减少不必要的循环上述法中算若数,包含组个元n,素那么必须进 n行一 1轮比 。在较多情数况下, n个对数进行序排,并一定要进不行n l~轮

}比

t em=pa k】【; a【 k Ia £k 1一】: a【 一k 1】;te m p;

' '

“l a g=  ̄l

;

’;;蓁颦器 备棠譬凑 数据交换排序已莞 成

)

。例对如5 8 9 1 23这个六数行排序,进只需进行要3轮比较就可以排序功成,而需不进行 5要比轮较。说这在明第 n-1轮比较经上过述进,改算在法每一轮较的效比上提率高一倍了但。值前,就有可能完成排,因序,此可对以上算述法进改进。改进行突的注得意的,是改的主要进果是效少减了环循次数,对于据数换次破点交在果排如序在第~nl轮比前较经已完成,则再不进行续后比数而言 并,有减没少。较,可减少 循环次数。具体方法是:设 一置个量变来标识 前轮当的 结束 4语

比是否存较在据数交的换情况,如存果数据在交,则说换明序可排传统冒的泡序算法代码简排洁,能稳性定,通上述过的进改, 能仍完未成,本轮比较结后继续束下一轮比较, 果如存在数不交据可减以少循环次的数提,高算法的效率 但,总体言其而时间复度杂换,则说明当前轮较时比,排 已序完经成,不用再继续进行后续的 仍较然高为 n2,冒泡排序法适算用于规较模小排序的。 较。比在每轮一比较开时,始给识标量赋值变为 1,然后在每轮一的 考参献文: 两相邻两的数较时,比果如在存数据交,换则将标识变量的值改为[ 1]蔚敏严数.据构[结M] .清华大学出社,版19 9 7, 4

c语言数据交换的算法流程图,C语言冒泡排序算法浅析相关推荐

  1. 【经典算法实现 3】冒泡排序算法(单向冒泡,双向冒泡)

    [经典算法实现 3]冒泡排序算法 及 算法优化 一.单向冒泡排序算法 O(n^2)(从小到大) 1. 核心算法实现 2. 代码实测 二.双向冒泡排序算法 O(n^2)(从小到大) 1. 核心算法实现 ...

  2. 冒泡排序算法与改进的冒泡排序算法

    活动地址:CSDN21天学习挑战赛 目录 一.冒泡排序原理 二.冒泡排序流程 三.实例 四.冒泡排序的改进 五.改进的冒泡排序时间性能分析 一.冒泡排序原理 对存放在数组的数据,按从前往后的方向进行多 ...

  3. 选择排序算法流程图_常用排序算法之选择排序

    前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...

  4. C语言试题八十八之实现选冒泡排序算法

    1.题目 C语言实现冒泡排序算法 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础,锻炼您的逻辑思维和解决问题的能力 ...

  5. c语言数据输入方式scanf,【C语言】-数据输入-scanf( )和getchar( )

    格式化输入函数scanf( ) scanf( )功能: 按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数 ...

  6. 经典排序算法(1)——冒泡排序算法详解

    冒泡排序是一种交换排序. 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止. 一.算法基本思想 (1)基本思想 冒泡排序的基本思想就是: ...

  7. 用matlab实现冒泡排序法,「冒泡排序算法」MATLAB实现冒泡排序算法 - seo实验室

    冒泡排序算法 本文转载自头条文章原文章地址 1.bubble_sort.m function y=bubble_sort(x) x_len=length(x); for i=1:x_len-1 for ...

  8. C语言数据交换算法和伪指令,补充:单片机c语言与汇编语言混合编程.ppt

    补充:单片机c语言与汇编语言混合编程 reg51.h和reg52.h:实质上是没有区别的,都是一些特殊功能寄存器的申明 sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0 ...

  9. c语言数据交换方法,实现C语言数据交换的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源一:比特网 来源二:东方锐智 这是个很common的例子,实现2个数据a,b的交换,a的值给b,b的值给a. 一般做法是借助中间变量缓存,实现交换.实 ...

最新文章

  1. 理解 Kotlin 中的属性(property)
  2. [Linux实用工具]Ubuntu环境下SSH的安装及使用
  3. bzoj 2342: 双倍回文 回文自动机
  4. javascript --- [FormData的使用] 表单元素转换成表单 对象二进制文件上传
  5. 向量距离汇总(连续值与离散值),Latex与Python实现
  6. Hadoop1——创建虚拟机
  7. java http 双向认证_HttpsURLConnection使用,并实现双向认证
  8. word中插入对号、错号符号
  9. powerdesigner、ERstudio、PDManER工具比较
  10. 怎么用数学绘图软件制作正方体展开动画?
  11. 网络安全——网络空间搜索引擎
  12. C# 调用outlook 收发邮件
  13. STM32 调整重启电压阈值 BOR
  14. 2020全球搜索引擎市场份额排行榜
  15. c语言中Exec函数,子进程的执行 -- exec 函数
  16. 减法公式运算法则_数学加减法运算和运算法则
  17. 三款好用的语音转文字软件,你知道几个?
  18. win10系统Jinlk固件烧写
  19. 顶尖量化交易公司 CEO 如何缔造量化金融王国?
  20. 黑客劫持域名步骤大曝光

热门文章

  1. c+pow函数的头文件_pow()函数以及C ++中的示例
  2. 近百家公司高级运维的面试题汇总
  3. CentOS7 源码编译安装NodeJS 最新版本Shell脚本
  4. python自己做个定时器_python 创建一个自己的类计时器
  5. ztree 指定节点清空_节点操作
  6. 计算机学校的奖项,2017年度国家科学技术奖各奖项公示
  7. excel删除行 uipath_学会这8个Excel神技巧,轻松告别零基础!
  8. android activity动态显示不出来,uiautomatorviewer 获取不到动态页面解决办法
  9. 清浊音判别 matlab,matlab语音信号处理如何判别清浊音?
  10. websocket 学习--简单使用,nodejs搭建websocket服务器,到模拟股票,到实现聊天室