冒泡排序

import java.util.Arrays;

public class BubbleRankTest {
    public static void main(String[] args) {
        int[] arrs = {2,3,6,3,4,1,8,7};
        bubbleRank(arrs);
        System.out.println(Arrays.toString(arrs));
    }
    //把第i大的元素移动到第N-i的位置上,脑袋中去想象动态的形象。
    public static void bubbleRank(int[] arrs) {
        if(arrs.length == 0) {
            System.out.println("数组是空的!");
            System.exit(-1);
        }
        int N = arrs.length;
        int temp;
        boolean flag = false;
        //外循环决定排序到第几趟冒泡,内循环控制具体的数组索引
//      for(int i=N-1; i>=0; i--) {
//          flag = false;
//          //这里是数组索引,最开始选取0~N-2的元素
//          for(int j=0; j
//              if(arrs[j] >= arrs[j+1]) {
//                  temp = arrs[j];
//                  arrs[j] = arrs[j+1];
//                  arrs[j+1] = temp;
//                  //标记这趟冒泡发生了交换
//                  flag = true;
//              }
//          }
//          if(!flag)
//              break;
//      }
        for(int i=1; i//数组区间[0,n-1],第一次a[j]从a[0]取到a[n-2],即第一趟冒泡中最后一次是a[n-2]和a[n-1]比较.
            for(int j=0; jif(arrs[j] >= arrs[j+1]) {
                    temp = arrs[j];
                    arrs[j] = arrs[j+1];
                    arrs[j+1] = temp;
                    flag = true;
                }
            }
            if(!flag)
                break;
        }
    }
}

冒泡排序属于交换排序,最坏的排序情况下(即逆序列)每一次比较都要进行交换,最坏时间复杂度是O(N²)(N-1+….+1),最好的情况是数组已经排好序了,则只需要遍历一次即可,即最好时间复杂度O(N),平均时间复杂度是O(N²)。

这里安利一个动态数据结构算法的网站:https://visualgo.net/zh/sorting

你可能感兴趣的:(算法,算法)