冒泡排序法是我们接触到的最简单的一种排序算法,如果说让你写一个冒泡排序都写不出来,可能你真的需要去静下心来,好好地学习一些简单的算法。
冒泡排序是遍历若干次要排序的数列,每次遍历都会从前往后依次比较相邻的两个数,每次遍历结束都会将未排序的部分的最大或最小值放在未排序队列的队尾,话不多说,让我们代码上见真招!
1 int a[6] = {20,40,30,10,60,50}; 2 int temp = 0; 3 4 for( int i = 5 ; i > 0 ; i-- ) 5 { 6 for( int j = 0 ; j < i ; j++ ) 7 { 8 if( a[j+1] < a[j]) 9 { 10 temp = a[j]; 11 a[j] = a[j+1]; 12 a[j+1] = temp; 13 } 14 else 15 continue; 16 } 17 }
让我们把核心代码部分封装成函数:
1 //a[]为所需要进行排序的数组,n为数组长度,实现的是一个升序的排序 2 void BubbleSort( int a[] , int n ) 3 { 4 int temp = 0; 5 6 for( int i = n-1 ; i > 0 ; i-- ) 7 { 8 for( int j = 0 ; j < i ; j++ ) 9 { 10 if( a[j+1] < a[j] ) 11 { 12 temp = a[j]; 13 a[j] = a[j+1]; 14 a[j+1] = temp; 15 } 16 else 17 continue; 18 } 19 } 20 }
图解:
下图显示了第一次遍历的详细过程,以后的每次遍历和此类似,不再多加赘述。
下图显示了每次遍历后的结果;
可以发现,其实第三次遍历的时候我们已经完成了数列的排序,所以冒泡排序可以进行优化,添加一个flag位用于标示在本次遍历中是否进行了交换的操作,如果没有进行交换操作,则跳出循环,完成排序。
冒泡排序法是一种稳定的排序算法,时间复杂度为O(N²),但不适合应用于大批量的数据排序。