厚积薄发

不忘初心,方得始终!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基本思想

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

实例

实现

 1 //稳定
 2 public class BubbleSort {
 3     public static void main(String[] args) {
 4         int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1, 8 };
 5         System.out.println("排序之前:");
 6         for (int i = 0; i < a.length; i++) {
 7             System.out.print(a[i] + " ");
 8         }
 9         // 冒泡排序
10         for (int i = 0; i < a.length; i++) {
11             for (int j = 0; j < a.length - i - 1; j++) {
12                 // 这里-i主要是每遍历一次都把最大的i个数沉到最底下去了,没有必要再替换了
13                 if (a[j] > a[j + 1]) {
14                     int temp = a[j];
15                     a[j] = a[j + 1];
16                     a[j + 1] = temp;
17                 }
18             }
19         }
20         System.out.println();
21         System.out.println("排序之后:");
22         for (int i = 0; i < a.length; i++) {
23             System.out.print(a[i] + " ");
24         }
25     }
26 }

分析

冒泡排序是一种稳定的排序方法。 

  • 若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是O(n)
  • 若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值∶O(n2)
  • 起泡排序平均时间复杂度为O(n2)
posted on 2016-06-30 11:12  欢迎来到Java的世界  阅读(95)  评论(0编辑  收藏  举报