算法-冒泡排序
2011-10-31 21:04
162 查看
冒泡排序的原理:简单的说,就是对数组里面的数字进行两两比较,较大的数不断地被交换上去,就像冒泡一样。每进行一轮排序,就是把最大的数找出来。
下面是实现算法一:
上面的实现方式是不管哪种情况,都要比较每2个数字,即比较n*n次。即使前面几轮的排序已经把较大的数找出来,后面的排序依然会对这些数进行比较,但实际上并不需要了。
见优化后的算法二:
这种实现方式是保持外循环次数不变的情况下,减小内循环的范围,如果已经得到较大的数,则不需要比较。这种情况,需要比较n(n-1)/2次,是不是还可以在优化呢,比如说,数组本来就是排好序的,这时候我们再不停地进行比较就比较多余了。
见优化后的算法三:
改进后的算法,最好的情况下只需要进行一轮的排序,比较n次,最坏的情况也同算法二,比较n(n-1)/2次。
小结:冒泡排序是比较简单的排序算法,容易理解、编程,而且比较稳定,相等数字的相对位置是不会变的。
下面是实现算法一:
public void BubbleSort(int[] numbers) { int temp; for (int i = 0; i < numbers.Length - 1; i++) { for (int j = 0; j < numbers.Length - 1; j++) { if (numbers[j] > numbers[j + 1]) { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } }
上面的实现方式是不管哪种情况,都要比较每2个数字,即比较n*n次。即使前面几轮的排序已经把较大的数找出来,后面的排序依然会对这些数进行比较,但实际上并不需要了。
见优化后的算法二:
public void BubbleSort(int[] numbers) { int temp; for (int i = numbers.Length - 2; i > 0; i--) { for (int j = 0; j < i; j++) { if (numbers[j] > numbers[j + 1]) { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } }
这种实现方式是保持外循环次数不变的情况下,减小内循环的范围,如果已经得到较大的数,则不需要比较。这种情况,需要比较n(n-1)/2次,是不是还可以在优化呢,比如说,数组本来就是排好序的,这时候我们再不停地进行比较就比较多余了。
见优化后的算法三:
public void BubbleSort(int[] numbers) { int temp; bool flag = false; //判断是否进行过数字的比较 for (int i = numbers.Length - 2; i > 0; i--) { //从第二轮比较开始,如果前面没有进行过比较,那么该数组是排好序的,跳出循环 if (!flag && i < numbers.Length - 2) { return; } for (int j = 0; j < i; j++) { if (numbers[j] > numbers[j + 1]) { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; flag = true; } } } }
改进后的算法,最好的情况下只需要进行一轮的排序,比较n次,最坏的情况也同算法二,比较n(n-1)/2次。
小结:冒泡排序是比较简单的排序算法,容易理解、编程,而且比较稳定,相等数字的相对位置是不会变的。
相关文章推荐
- 白话经典算法系列之中的一个 冒泡排序的三种实现
- 【更新】排序算法比较:插入排序,冒泡排序,归并排序,堆排序,快速排序,计数排序,基数排序,桶排序
- 常用算法(冒泡排序、二分法查找)
- 算法分析之冒泡排序
- c# 数据结构算法学习一:冒泡排序
- 白话经典算法系列之一 冒泡排序的三种实现 【转】
- 算法--01.冒泡排序
- 冒泡排序、选择排序、堆排序、快速排序、插入排序算法复杂度分析与算法实现(自己总结与转)
- c语言中冒泡排序、插入排序、选择排序算法比较
- 白话经典算法系列之一 冒泡排序的三种实现
- 10种算法原理(冒泡排序,选择排序,快速排序,堆排序,希尔排序,桶排序等)
- 简单算法-冒泡排序[php实现]
- (一)算法——冒泡排序、选择排序
- 【算法基础】冒泡排序
- 【坐在马桶上看算法】算法2:邻居好说话:冒泡排序 推荐
- 2.冒泡排序——啊哈算法java实现
- 算法学习与实践之冒泡排序
- 白话经典算法系列之一 冒泡排序的三种实现
- 冒泡排序的算法分析与改进
- 第十五周项目1(3)-验证算法(冒泡排序)