美文网首页
排序 -- 选择/插入

排序 -- 选择/插入

作者: sunyelw | 来源:发表于2019-08-22 21:29 被阅读0次

聊聊排序吧

  • 冒泡排序

  • 选择排序

  • 插入排序

  • 快速排序

  • 归并排序

  • 计数排序

  • 桶排序

  • 堆排序

本篇 选择排序与插入排序

这俩兄弟放一起再合适不过了,排序的思路类似
将原始数组划分为有序数组与无序数组,增加有序数组或者说减少无序数组,直到无序数组为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(1)的空间复杂度
  • 选择排序不是稳定排序,涉及到了非相邻元素的直接交换(存在无序数组中的第一位跟无序数组中最小元素交换的可能)
  • 不管数据情况如何,选择排序都会把所有比较都走完,所以其三者的时间复杂度是一样的,都是O(N^2)
名称 原地 稳定 最好 最坏 平均
选择排序 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) O(N^2) O(N^2)

相关文章

  • OC中的排序算法

    目录 冒泡排序、快速排序、选择排序、插入排序 冒泡 快排 选择 插入

  • c算法O(n)^2(一)

    选择排序 插入排序 优化插入排序算法

  • IOS 常用算法

    一:排序算法 排序方式有插入排序,选择排序和交换排序三种。插入排序有直接插入排序和希尔排序。选择排序有简单选择排序...

  • Java排序算法

    插入排序 直接插入排序 折半插入排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 其他排序 二路...

  • iOS算法

    排序方法 选择排序:直接选择排序、堆排序。 交换排序:冒泡排序、快速排序。 插入排序:直接插入排序、二分法插入排序...

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

  • 给自己备份的排序代码

    交换排序 冒泡排序 快速排序 插入排序 直接插入排序 希尔排序 选择排序 简单选择排序 堆排序

  • 九种排序算法(重要!!)

    分类:(九种排序算法) 1、插入排序:直接插入排序、二分插入排序、希尔排序; 2、选择排序:简单选择排序、堆排序 ...

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

  • 排序 -- 选择/插入

    聊聊排序吧 冒泡排序 选择排序 插入排序 快速排序 归并排序 计数排序 桶排序 堆排序 本篇 选择排序与插入排序 ...

网友评论

      本文标题:排序 -- 选择/插入

      本文链接:https://www.haomeiwen.com/subject/skoosctx.html