c语言选择排序怎么写 c语言堆排序方法及优缺点?
c语言堆排序方法及优缺点?
1.冒泡排序一组无序数据a[1],a[2],...已知一个[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],并且有序区域是空的。
②在第一次排序中,从无序区域R[1]中选择具有最小关键字的记录R[k]..n],并且它与无序区域中的第一个记录R[1]交换,使得R[1..1]和R[2..n]分别变成增加一条记录的新的有序区域和减少一条记录的新的无序区域。
③第I次排序开始时,当前有序区和无序区为R[1..i-1]和R(1≤i≤n-1)。
这个排序从当前无序区中选择关键字最小的记录R[k],与无序区中的第一条记录R交换,使R [1...I]和R分别成为增加一条记录的新有序区和减少一条记录的新无序区。
这样,n个记录文件的直接选择排序就可以得到n-1个直接选择排序后的一个有序结果。
优点:移动数据的次数是已知的(n-1次);
缺点:比较太多。3.插入一组升序数据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[x]为止。]分别后移一位,将b[1]插入到a[x]的原位置,这样就完成了b[1]的插入。B[2]~b[m]以同样的插入。
(如果有无数个组A,b[1]可以看作n1的数组A。)
优点:稳定快速;
缺点:比较的次数不一定相同。比较次数越少,插入点后移动的数据就越多,尤其是数据总量巨大的时候,而链表可以解决这个问题。4.缩减增量排序是Hill在1959年提出的,也称为Hill排序(sh
c语言运用sort排序函数,需要的头文件是什么?
# inclultstdio . HGT # inclultstdlib . hgtintcomp(const void * a,const void * b)//用于比较的函数。{ return *(int *)a-*(int *)b } int main(){ int a[10]{ 2,4,1,5,5,3,7,4,1,5 }/无序数组。Int iqsort (a,10,sizeof (int),comp)//调用q port sorting for(I oilt 10 I)//输出排序后的数组{printf(
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。