zoukankan      html  css  js  c++  java
  • 计数排序

    比较排序的极限是O(nlgn)

    而计数排序非比较排序 他的复杂度只有O(n)

    基本思想是:

      1、统计a数组中每个数字出现的次数放在临时数组c中,c的大小为a中最大的数

      2、在第一步统计的基础上遍历一遍统计小于等于i的数出现的次数即c[i]+=c[i-1]

      3、通过数组c确定a[i]的位置,放在结果数组b中,出现相同元素的时候下一个相同元素的位置前移一位

    代码如下:

      

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #define random(x) (rand()%x) 
     5 using namespace std;
     6 
     7 void counting_sort(int *a,int *b,int n,int k){
     8     int *c=new int[k+1];
     9     memset(c,0,sizeof(int)*(k+1));
    10     int i;
    11     for(i=0;i<n;i++)
    12         c[a[i]]++;
    13     for(i=1;i<=k;i++)
    14         c[i]+=c[i-1];
    15     for(int j=n-1;j>=0;j--){
    16         b[c[a[j]]-1]=a[j];
    17         c[a[j]]--;
    18     }
    19 }
    20 
    21 int main(){
    22     int a[100],b[100],max=0;
    23     for(int i=0;i<100;i++){
    24         a[i]=random(1000);
    25         if(a[i]>max) max=a[i];
    26     } 
    27     counting_sort(a,b,100,max);
    28     for(int i=0;i<100;i++){
    29         cout<<b[i]<<" ";
    30     }
    31     cout<<endl;
    32     return 0;
    33 }
  • 相关阅读:
    JavaScript——math对象
    JavaScript——日期相关
    JavaScript——数组与数组方法
    JavaScript——数值
    JavaScript——字符串方法
    关于CSS的一些问题(一)
    html5新增标签
    svg
    在自定义组件中使用v-model
    百度地图定位
  • 原文地址:https://www.cnblogs.com/verlen11/p/4517957.html
Copyright © 2011-2022 走看看