简介
冒泡排序,有时候又叫做下沉排序,是一种很简单的排序算法,它通过一系列重复的操作来让一个序列变得有序:
比较相邻的2项,如果他们不符合排序的顺序,则交换他们的位置,重复这个操作,直到没有元素需要交换为止,这个时候也就意味着序列已经有序了。
虽然冒泡排序很简单,但是它太慢了,即便是相对插入排序来说。所以于我们一般不会选择它去解决实际的编程问题。
当序列基本有序,只有几处地方无序,且无需元素间距很近时,我们才会考虑使用它。
冒泡排序的要点
- 冒泡排序需要 二重循环,最外层控制 趟数 , 每一趟 会在当前比较序列选出一个最大的数沉底。最内层控制在当前排序序列中找出最大数。
- n个元素排序,最外层循环趟数是 n-1 ,而不是 n。想想只有一个元素的序列,需要比较几趟呢?显然是 1-1=0趟,因为无需比较。
- 时间复杂度: O(n2)
- 平均时间复杂度 : O(n2)
- 空间复杂度 : O(1)
- 稳定性: 稳定
如此重复...
void bubble_sort(int*arr,int len) { int temp; for(int i=0;i<len-1;++i) //最外层循环控制 "趟" 数 { for(int k=0;k<len-1-i;++k) //缩短比较序列,循环比较,需要时,交换 if(arr[k]<arr[k+1]) //降序排序 { temp = arr[k]; arr[k] = arr[k+1]; arr[k+1] = temp; } } }