冒泡排序
来源:互联网 发布:淘宝一件代发教学 编辑:程序博客网 时间:2024/05/29 09:55
冒泡排序
冒泡排序是一种比较简单的排序算法,它是一种线性排序算法,通过对相邻两个元素的比较和交换来对元素进行排序。
原理
假定现在有一个长度为n的数组
1. 从
2. 通过第一次遍历后,最大的数就被筛选出来,放在
3. n–,重复前面两步,直到所有的元素都被放在正确的位置上。想当于排除掉已经放在正确位置上的数,对剩下的数组元素做排序。
每一次对剩余每一次遍历可以确定一个数的位置,第n-1次遍历完成之后数组排序完成。
分析
初始数组
这里分析第一次排序
- 4 3 比较,完成后 3 4 5 1 2
- 4 5 比较,完成后 3 4 5 1 2
- 5 1 比较,完成后 3 4 1 5 2
- 5 2 比较,完成后 3 4 1 2 5
可以发现第一次的排序就是将最大值5移到最后一位的过程。
代码
void swap(int* a, int* b){ int temp = *a; *a = *b; *b = temp;}void bubbleSort(int* arr, int len){ for(int i = 0; i < len - 1; i++) { for(int j = i + 1; j < len; j++) { if(arr[i] > arr[j]) { swap(arr + i, arr + j); } } }}
优化
现在对初始数组
经过第一次排序后我们发现数组变成了
因为冒泡排序只有在前数比后数大时才会交换,我们可以定义一个指针,指向最后一个做交换的后数,它之后的所有数必定已经是有序的。
void bubble(int* arr, int len){ int p = len - 1; while(p) { int k = p; p = 0; for(int i = 1; i < k; i++) { if(arr[i - 1] > arr[i]) { swap(arr + i - 1, arr + i); p = i; } } }}
时间复杂度
n个元素的数组要进行n-1次遍历,每次遍历最多进行的交换次数依次为
n-1 , n-2 , n-3 , …. , 1
将其相加,结果为
所以冒泡排序的时间复杂度为
阅读全文
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- mysql可能造成索引失效的场景
- 基于Spring框架的Shiro配置
- java中trim()方法的作用
- RA-01940:无法删除当前已链接的用户(转)
- java数据的排序方法
- 冒泡排序
- Gtk-WARNING **: cannot open display问题的解决
- masonry布局出现 'couldn't find a common superview for...报错解决办法
- 上滑标题栏渐变效果
- jquery获取子节点和父节点的示例代码
- 遍历文件夹下的所有文件(Python&C++)
- matlab数据自动循环写入excel文件
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- Git常用命令