交换排序之冒泡排序
来源:互联网 发布:优雅的谎言影评知乎 编辑:程序博客网 时间:2024/05/01 21:15
冒泡排序算法的基本思想是:假设待排序表长为n,从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。我们成它为一趟冒泡,结果将最大(最小)的元素交换到待排序列的最后一个位置。下一趟冒泡时,前一趟确定的最大元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果把序列中的最大元素放到了序列的最终位置。
public class BubbleSort {
public static void main(String[] args) { int[] values = { 120, 109, 98, 87, 76, 65, 54, 43, 32, 21, 10 }; sort(values);}/** * 冒泡排序,交换相邻的两个元素确保较大的元素被移动最后。 * * @param values */public static void sort(int[] values) { int temp = 0; for (int i = 0; i < values.length - 1; i++) {// 趟数n-1趟 for (int j = 0; j < values.length - i - 1; j++) {// 对比交换相邻数据n-i-1次 if (values[j] >= values[j + 1]) { temp = values[j]; values[j] = values[j + 1]; values[j + 1] = temp; } } }// for}// sort
}
冒泡排序算法性能分析:
1)空间效率:仅使用了常数个辅助单元,因而空间复杂度为O(1)
2)时间效率:当初始序列有序时,第一趟冒泡比较次数为n-1,移动次数为0,此时直接跳出循环,从而最好的情况下的时间复杂度为O(n);当初始序列为逆序时,需要进行n-1趟排序,第i趟排序需要进行n-i次比较,而且每次比较需要移动元素3次来交换元素位置,这种情况下,比较次数为n(n-1)/2,移动次数为3[n(n-1)/2],从而,最坏情况下时间复杂度为O(n²),其平均时间复杂度也为O(n²)。
3)稳定性:由于当i>j且A[i].key=A[j].key时,不会交换两个元素,从而冒泡排序是一个稳定的排序方法。
冒泡排序的应用:
当待排序的元素规模小:用冒泡排序。规模大一般用快速排序,堆排序。冒泡排序从空间复杂度和时间复杂度来看并不是最好的排序方法。但是冒泡排序有一些优点:冒泡排序空间复杂度较低,是一种稳定的排序(冲突间相对位置不变),当文件为正序时冒泡方法最佳。缺点是时间复杂度高,效率不好。
0 0
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之冒泡排序
- 交换排序之--冒泡排序
- 交换排序之冒泡排序
- 交换排序之--冒泡排序,快速排序
- 八大排序 -- 交换排序之【冒泡排序】
- Android ListView NetworkImageView 滑动时复用问题
- poj1006 / hdu1370 Biorhythms (中国剩余定理)
- poj-3295-Tautology
- 67. Add Binary
- 添加或者更新字段说明
- 交换排序之冒泡排序
- 添加或者更新表说明
- Android内存泄漏的各种原因详解
- 【理解JVM】JVM内存分块和垃圾收集算法(HotSpot)
- Android adb 打开mediascanner
- poj2478 Farey Sequence (欧拉函数)
- 【开源项目13】Volley框架 以及 设置request超时时间
- sublime安装package control及常用插件
- JavaScript 回调函数抽离调用简记