算法一:冒泡算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法一:冒泡算法相关的知识,希望对你有一定的参考价值。
所谓冒泡算法就是把排序想像成水里的水泡,小的在上面,大的在下面
相邻的两个元素比较,如果前面的比后面的大,就交换。
如有一组数据:3,6,2,1,9
->3,2,1,6,9
->2,1,3,6,9
->1,2,3,6,9
int main() { int a[] = {3,6,2,1,9}; for (int i = 0; i < sizeof(a)/4; i++) { for (int j = 0; j < sizeof(a)/4 - i - 1; j++) { if (a[j]>a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int i = 0; i < sizeof(a)/4; i++) { printf("%d ", a[i]); } cin.get(); }
时间复杂度:如果已经是排好的则记录移动次数为n-1,移动数据为0,最好的复杂度为O(N);若文件为反序(最坏)排序为N-1次,每次
排序需要进行N-1次比较,还要进行三次的数据交换。复杂度为O(N2)。空间复杂度为O(1)冒泡排序是一种稳定的排序.
优化:
可以添加一个标志位,如果数据进行了交换则将标记置为flase.如果标记一直为ture则说明,没有交换数据,已经排好序
int main() { int a[] = {3,6,2,1,9}; bool flage = true; for (int i = 0; i < sizeof(a)/4; i++) { for (int j = 0; j < sizeof(a)/4 - i - 1; j++) { if (a[j]>a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; flage = false; } } if(flage) break; } for (int i = 0; i < sizeof(a)/4; i++) { printf("%d ", a[i]); } cin.get(); }
以上是关于算法一:冒泡算法的主要内容,如果未能解决你的问题,请参考以下文章
算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度
算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度