排序(五):冒泡排序

来源:互联网 发布:勇士vs掘金季后赛数据 编辑:程序博客网 时间:2024/04/30 09:37

利用交换数据元素的位置进行排序的方法称为交换排序。常用的交换排序方法有冒泡排序法和快速排序法。快速排序法是一种分区交换排序方法。


冒泡排序的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。第一趟完成,最大的数被放置在最后。
重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。
如此下去,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。


因为冒泡排序比较简单,所以直接给出示例程序:

//冒泡排序void bubbleSort(int data[], int n){int flag = 0;//总共比较n-1趟for (int i = 1; i < n && flag == 0; i++){//flag用于判断本次交换排序过程是否有交换动作,若本次交换排序过程没有交换动作,则说明数据元素已经全部排列好,就可以提前结束排序过程。flag = 1;for (int j = 0; j < n - i; j++){if (data[j + 1] < data[j]){flag = 0;swap(&data[j], &data[j + 1]);}}}}

//交换两个元素void swap(int *numx, int *numy){int temp;temp = *numx;*numx = *numy;*numy = temp;}


0 0