c语言冒泡排序快速方法 c语言选择排序和冒泡排序的区别?

[更新]
·
·
分类:互联网
4658 阅读

c语言冒泡排序快速方法

c语言选择排序和冒泡排序的区别?

c语言选择排序和冒泡排序的区别?

不同点:
1.
冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。
2.
选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素,依次循环找完。
程序分析:
1.
选择排序:
1gt.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的。此时就要利用3个变量i,j,k表示元素的下标。i表示当前,j表示找到的最大(最小)的下标,k用于存放每次循环中最大值的下标。
2gt.在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给k。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换a[k] 与当前a[i]的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。
2.
冒泡排序:
1gt.对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大(小),则将其调换位置,直至所有的数都比较完。
2gt.如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环 判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出

c语言如何用冒泡法排序?

冒泡排序是一种复杂度为O(n2)的低效排序算法。它通过不断比较元素并交换位置使一个元素到达有序集合的正确位置上。
冒泡排序的过程是把相邻的数据元素进行交换,从而逐步将待排序序列变成有序序列。冒泡排序的基本思想是:从头扫描待排序序列,在扫描的过程中顺次比较相邻两个元素的大小。
下面以升序为例介绍排序过程。
(1)在第一轮排序中,对n个记录进行如下操作。
①对相邻的两个记录的关键字进行比较,逆序时就交换位置。
②在扫描的过程中,不断向后移动相邻两个记录中关键字较大的记录。
③将待排序记录序列中的最大关键字记录交换到待排序记录序列的末尾,这也是最大关键字记录应在的位置。
(2)进行第二轮冒泡排序,对前n-1个记录进行同样的操作,其结果是使次大的记录被放在第n-2个记录的位置上。
(3)继续进行排序工作,在后面几轮的升序处理也反复遵循了上述过程,直到排好顺序为止。如果在某一轮冒泡过程中没有发现一个逆序,就可以马上结束冒泡排序。整个冒泡过程最多可以进行n-1轮,如图演示了一个完整的冒泡排序过程。
使用C语言实现冒泡排序的算法代码如下所示:
/*对数组 r 做冒泡排序,length为数组的长度*/
typedef int KeyType
typedef struct {
KeyType key
} RecordType
void BubbleSort(RecordType r[], int length ){
nlength
changeTRUE;
for ( i1 ilt n-1 ampamp change i ) {
changeFALSE;
for ( j1 jlt n-i j)
if (r[j].keygt r[j 1].key ) {
x r[j]
r[j] r[j 1]
r[j 1] x
changeTRUE;
}
}
} /* BubbleSort */