排序

作者: 不停游动的鱼 | 来源:发表于2017-08-17 11:49 被阅读0次

稳定排序

排序法 平均时间 最差时间 额外空间 稳定性 数据量
冒泡排序 O(n2) O(n2) O(1) 稳定 数量较小时使用
插入排序 O(n2) O(n2) O(1) 稳定 大部分有序时使用
基数排序 O(logRB) O(logRB) O(n) 稳定 B是真数(0-9),R是基数
归并排序 O(nlogn) O(nlogn) O(1) 稳定 数量大时使用

不稳定排序

排序法 平均时间 最差时间 额外空间 稳定性 数据量
交换排序 O(n2) O(n2) O(1) 不稳定 数量较小时使用
快速排序 O(nlogn) O(n2) O(nlogn) 不稳定 数量大时使用
选择排序 O(n2) O(n2) O(1) 不稳定 数量较小时使用
希尔排序 O(nlogn) O(ns) 1 < s < 2 O(1) 不稳定 s 是所选分组
堆排序 O(nlogn) O(nlogn) O(1) 不稳定 数量大时使用

交换排序

    int[] arr = new int[2000];
    for (int i = 0; i < arr.length; i ++) {
        arr[i] = new Random().nextInt(20000);
    }
    System.out.println("start --> " + System.currentTimeMillis());
    for (int i = arr.length - 1; i >= 0; i --) {
        for (int j = i - 1; j >= 0; j --) {
            if (arr[i] < arr[j]) {
                arr[i] = arr[i] ^ arr[j];
                arr[j] = arr[i] ^ arr[j];
                arr[i] = arr[i] ^ arr[j];
            }
        }
    }
    System.out.println("end --> " + System.currentTimeMillis());
    for (int i = 0; i < arr.length; i ++) {
        System.out.print(arr[i] + ", ");
    }
    System.out.println();

选择排序

    for (int i = 0; i < arr.length; i ++) {
        arr[i] = new Random().nextInt(20);
    }
    System.out.println("start --> " + System.currentTimeMillis());
    for (int i = 0; i < arr.length; i ++) {
        int temp = i;
        for (int j = i + 1; j < arr.length; j ++) {
            if (arr[temp] < arr[j]) {
                temp = j;
            }
        }
        if (temp != i) {
            arr[i] = arr[temp] ^ arr[i];
            arr[temp] = arr[temp] ^ arr[i];
            arr[i] = arr[temp] ^ arr[i];
        }
    }
    System.out.println("end --> " + System.currentTimeMillis());
    for (int i = 0; i < arr.length; i ++) {
        System.out.print(arr[i] + ", ");
    }

相关文章

  • 【恋上数据结构与算法二】(一)排序(Sorting)

    排序方法 冒泡排序 选择排序 堆排序 插入排序 归并排序 快速排序 希尔排序 计数排序 基数排序 桶排序 初识排序...

  • 排序-冒泡排序

    排序系列传递门 排序—选择排序排序—快速排序排序—插入排序排序-希尔排序(待完善)排序—归并排序(待完善)排序—基...

  • 排序

    冒泡排序: 冒泡排序 选择排序: 插入排序: 希尔排序: 归并排序: 快速排序: 堆排序: 计数排序: 桶排序: ...

  • Java | 10种排序算法

    冒泡排序 选择排序 插入排序 希尔排序 计数排序 基数排序 堆排序 归并排序 快速排序 桶排序

  • 常见的排序

    冒泡排序: 选择排序: 插入排序: 快速排序: 希尔排序: 归并排序: 堆排序: 计数排序: 桶排序: 基数排序:

  • 002--20200409刷题

    冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序

  • 排序

    排序 符号:Θ 插入排序 选择排序 堆排序 归并排序 冒泡排序 快速排序 桶排序 基数排序 计数排序 插入排序 插...

  • 排序 -- 选择/插入

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

  • 前端基础整理 | 算法基础

    排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序

  • Java 常见的 8 种排序算法(内排序)

    排序分类 内部排序 插入排序:直接插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:直接选择排序、堆排序...

网友评论

      本文标题:排序

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