从小到大冒泡排序c语言
C语言冒泡排序源程序?
C语言冒泡排序源程序?
相信学过C语言的朋友都知道,在C语言中,常用的排序算法有:冒泡排序、快速排序、插入排序、选择排序、希尔排序、堆排序以及归并排序等等。就算没有用过,相信大家也有所耳闻。在这里呢,小编主要是想和大家一起来探讨探讨C语言的冒泡排序法,大家有什么好的建议可以在评论里给我留言,希望我们相互学习,共同进步。
1、所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。一般地,如果有N个数需要排序,则需要进行(N-1)趟起泡,我们以从小到大排序为例来看一下,具体情况如下图所示:
c语言标记排序法?
可以先用冒泡排序法。然后标记处对应的下标号。
C语言程序,排序----快速排序法?
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
扩展:C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
c语言堆排序方法及优缺点?
一、冒泡排序 已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。
首先比较a[1]与 a[2]的值,若a[1]大于a[2]则交换 两者的值,否则不变。
再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。
再比 较a[3]与a[4],以此 类推,最后比较a[n-1]与a[n]的值。
这样处理一轮后,a[n]的值一定是这组数据中最大的。
再对a[1]~a[n- 1]以相同方法 处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。
再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理 n-1 轮 后a[1]、a[2]、……a[n]就以升序排列了。
优点:稳定;
缺点:慢,每次只能移动相邻两个数据。 二、选择排序 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数 据元素排完。
选择排序是不稳定的排序方法。 n 个记录的文件的直接选择排序可经过n-1 趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1 趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1 个记录R[1]交换,使R[1..1]和R[2..n]分别变 为记录个数增加1 个的新有序区和记录个数减少1 个的新无序区。
③第i 趟排序 第i 趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。
该趟 排序从当前无序区中选出关键字最 小的记录 R[k],将它与无序区的第1 个记录R 交换,使R[1..i]和R 分别变为记录个数增加1 个的新有序区和记录个数减少 1 个的新无序区。
这样,n 个记录的文件的直接选择排序可经过n-1 趟直接选择排序得到有序结果。
优点:移动数据的次数已知(n-1 次);
缺点:比较次数多。 三、插入排序 已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。
首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值, 若b[1]仍然大于a[2],则继续跳过,直 到b[1]小于a 数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1] 的插入。b[2]~b[m]用相同方法插入。
(若无数组a,可将b[1]当作n1 的数组a)
优点:稳定,快;
缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决 这个问题。 四、缩小增量排序 由希尔在1959 年提出,又称希尔排序(shell 排序)。
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。
发现当n 不大时,插入 排序的效果很好。首先取一增 量d(dltn),将a[1]、a[1 d]、a[1 2d]……列为第一组,a[2]、a[2 d]、 a[2 2d]……列为第二组……,a[d]、a[2d]、a[3d]……#34#34 列为最后一组以次类推,在各组内用插入排序,然后取d#39ltd,重复上述操#34#34 作,直到d#341。#34 优点:快,数据移动少;#34#34 缺点:不稳定,d#34#34 的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。#34#34 五、快速排序#34#34 快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。 #34#34 已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]#34#34 作为基准。比较a[x]与其它数据并#34#34 排序,使a[x]排在数据的第k#34#34 位,并且使a[1]~a[k-1]中的每一个数#34#34 据a[x],然后采 用分治的策略分别对a[1]~a[k-1]和a[k 1]~a[n] 两组数据进行快速排序。 优点:极快,数据移动少; 缺点:不稳定。