排序 -- 选择/插入

2019-08-22  本文已影响0人  sunyelw

聊聊排序吧

本篇 选择排序与插入排序

这俩兄弟放一起再合适不过了,排序的思路类似
将原始数组划分为有序数组与无序数组,增加有序数组或者说减少无序数组,直到无序数组为0


选择排序

  1. 概念
    从无序数组中选择最小的放到有序数组的最后
  2. 实现
private void doSort(int[] arr, int len) {

    if (len < 2) return;
    for (int i = 0; i < len; i++) {
        int j = i;
        int minPos = j;
        int tmp = arr[j];
        // find the smallest data
        while (j < len - 1) {
            if (arr[j + 1] < tmp) {
                minPos = j + 1;
                tmp = arr[j + 1];
            }
            j++;
        }
        // swap arr[maxPos] arr[i]
        if (minPos != i) {
            int xtmp = arr[i];
            arr[i] = arr[minPos];
            arr[minPos] = xtmp;
        }
    }
    System.out.println(Arrays.toString(arr));
}
名称 原地 稳定 最好 最坏 平均
选择排序 O(N^2) O(N^2) O(N^2)

插入排序

private void doSort(int[] arr, int len) {
    if (len < 2) return;
    int tmp, j;
    for (int i = 1; i < len; i++) {
        tmp = arr[i];
        j = i - 1;
        while (j > -1 && arr[j] > tmp) {
            // swap arr[j] arr[j + 1]
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = tmp;
    }
    System.out.println(Arrays.toString(arr));
}
名称 原地 稳定 最好 最坏 平均
插入排序 O(N) O(N^2) O(N^2)
上一篇 下一篇

猜你喜欢

热点阅读