O(n^2)的排序方法

选择排序

  • 基本思路:每次选择一个最小的值放在前面
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
package Sort;

public class SelectSort {
    public static void swap(int[] vec, int i, int j){
        int tmp = vec[i];
        vec[i] = vec[j];
        vec[j] = tmp;
    }

    public static void selectSort(int[] vec){
        if(vec.length < 2)
            return;
        for (int i = 0; i < vec.length - 1; i++) {
            int minIndex = i;
            for(int j = i + 1; j < vec.length; j++){
                minIndex = vec[j] < vec[minIndex] ? j : minIndex;
            }
            swap(vec, i, minIndex);
        }
    }

    public static void main(String[] args) {
        int[] vec = {5,2,0,7,-3,8,12};
        selectSort(vec);
        for(int x : vec){
            System.out.print(x + "\t");
        }
    }
}

冒泡排序

  • 基本思想:每次比较相邻两个,将较大元素置于后面
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定
package Sort;

public class BubbleSort {
    public static void swap(int[] vec, int i, int j){
        int tmp = vec[i];
        vec[i] = vec[j];
        vec[j] = tmp;
    }

    public static void bubbleSort(int[] vec){
        if(vec.length < 2)
            return;
        for (int i = vec.length-1; i > 0; i--) {
            for(int j = 0; j < i; j++){
                if(vec[j] > vec[j+1]){
                    swap(vec, j, j+1);
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] vec = {5,2,0,7,-3,8,12};
        bubbleSort(vec);
        for(int x : vec){
            System.out.print(x + "\t");
        }
    }
}

插入排序

  • 基本思想:先将前面排好序,新元素向前比较放到合适位置
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定
package Sort;

public class InsertSort {
    public static void swap(int[] vec, int i, int j){
        int tmp = vec[i];
        vec[i] = vec[j];
        vec[j] = tmp;
    }

    public static void insertSort(int[] vec){
        for(int i = 1; i < vec.length; i++){
            for(int j = i - 1; j >= 0; j--){
                if(vec[j] > vec[j+1]){
                    swap(vec,j,j+1);
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] vec = {5,2,0,7,-3,8,12};
        insertSort(vec);
        for(int x : vec){
            System.out.print(x + "\t");
        }
    }
}
posted @ 2020-10-17 20:39  提笔书几行  阅读(143)  评论(0编辑  收藏  举报