排序

稳定排序

排序法 平均时间 最差时间 额外空间 稳定性 数据量
冒泡排序 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] + ", ");
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,235评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,747评论 0 15
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,470评论 1 4
  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 9,265评论 0 10
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,287评论 0 2