• 排序算法一计数排序


    简介

    计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。

    它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。

    1. count sort,以空间换时间
    2. 时间复杂度O(n)
    3. 空间复杂度O(max+n)max为要排序的数据中的最大值。

    计数排序就是计算相同key的元素各有多少个,然后根据出现的次数累加而获得最终的位置信息。

     

    计数排序有两个限制条件,

      那就是存在一个正整数K,使得数组里面的所有元素的key值都不大于N,

      key值都是非负整数。

     1 class CountSort {
     2     public static void main(String[] args) {
     3         int[] arr = {-2, -32, -1, 5, 0, 3, -1, 6, 4, 5};
     4         int a = 0;
     5         int b = arr.length - 1;
     6         arr=countSort(arr, 0, b);
     7     }
     8 
     9     private static int[] countSort(int[] arr, int a, int b) {
    10         if (arr.length <= 1) return arr;
    11         
    12         //寻找最大与最小值
    13         int min = arr[0];
    14         int max = arr[0];
    15         for (int i = 1; i < arr.length; i++) {
    16             if (min > arr[i]) min = arr[i];
    17             if (max < arr[i]) max = arr[i];
    18         }
    19         
    20         //新数组
    21         int[] finalarr = new int[arr.length];
    22         //count储存元素的个数
    23         int[] count = new int[max - min + 1];
    24         
    25         for (int i = 0; i < arr.length; i++) {
    26             count[arr[i] - min]++;
    27         }
    28 
    29         //将count中储存的数据转移至finalarr
    30         int f = 0;
    31         for (int i = 0; i < count.length; i++) {
    32             for (int j = 0; j < count[i]; j++) {
    33                 finalarr[f++] = i + min;
    34             }
    35         }
    36         return finalarr;
    37     }
    38 }
  • 相关阅读:
    ubuntu12.04 安装eclipse
    loj 1429(可相交的最小路径覆盖)
    loj 1406(状态压缩)
    mysql数据库表插入单条数据/批量插入数据
    window7安装MongoDB详细步骤
    django中的setting全局变量的导入
    django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)
    DjangoDRF序列化组件使用
    python并发编程知识点总结
    协程+IO切换实现并发
  • 原文地址:https://www.cnblogs.com/loveer/p/11265324.html
Copyright © 2020-2023  润新知