a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

詳解計數排序算法及C語言程序中的實現

2020-01-26 14:31:29
字體:
來源:轉載
供稿:網友

關于計數排序算法

當輸入的元素是 n 個 0 到 k 之間的整數時,它的運行時間是 Θ(n + k)。計數排序不是比較排序,排序的速度快于任何比較排序算法。

由于用來計數的數組C的長度取決于待排序數組中數據的范圍(等于待排序數組的最大值與最小值的差加上1),這使得計數排序對于數據范圍很大的數組,需要大量內存。計數排序是用來排序0到100之間的數字的最好的算法,但是它不適合按字母順序排序人名。但是,計數排序可以用在基數排序中的算法來排序數據范圍很大的數組。

算法的步驟如下:

  • 找出待排序的數組中最大和最小的元素
  • 統計數組中每個值為i的元素出現的次數,存入數組C的第i項
  • 對所有的計數累加(從C中的第一個元素開始,每一項和前一項相加)
  • 反向填充目標數組:將每個元素i放在新數組的第C(i)項,每放一個元素就將C(i)減去1

代碼示例:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>using namespace std;void CountingSort(int *A,int *B,int *Order,int N,int K){  int *C=new int[K+1];  int i;  memset(C,0,sizeof(int)*(K+1));  for (i=1;i<=N;i++) //把A中的每個元素分配    C[A[i]]++;  for (i=2;i<=K;i++) //統計不大于i的元素的個數    C[i]+=C[i-1];  for (i=N;i>=1;i--)  {    B[C[A[i]]]=A[i]; //按照統計的位置,將值輸出到B中,將順序輸出到Order中    Order[C[A[i]]]=i;    C[A[i]]--;  }}int main(){  int *A,*B,*Order,N=15,K=10,i;  A=new int[N+1];  B=new int[N+1];  Order=new int[N+1];  for (i=1;i<=N;i++)    A[i]=rand()%K+1; //生成1..K的隨機數  printf("Before CS:/n");  for (i=1;i<=N;i++)    printf("%d ",A[i]);  CountingSort(A,B,Order,N,K);  printf("/nAfter CS:/n");  for (i=1;i<=N;i++)    printf("%d ",B[i]);  printf("/nOrder:/n");  for (i=1;i<=N;i++)    printf("%d ",Order[i]);  return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: av成人免费 | 中文字幕亚洲精品 | 免费午夜视频 | 精品伦精品一区二区三区视频 | 国产亚洲精品久久 | 亚洲高清在线观看视频 | 嫩草视频在线观看免费 | 国产成人涩涩涩视频在线观看 | 亚洲一区二区在线播放 | 欧美日韩视频网站 | 99久久久国产精品美女 | 99视频在线| 国产欧美精品一区二区色综合 | 天堂一区| 午夜精品久久久久久久男人的天堂 | 精品一区二区三区视频 | 中文字幕91 | 亚洲精品久久久久久久久久久 | 国产精品久久久久久久久久久久 | 精品自拍网 | 亚洲视频观看 | 国产精品第一国产精品 | 欧美午夜一区二区三区 | 91九色在线 | 日韩在线中文字幕 | 一区二区影视 | 中文字幕综合在线分类 | 国产在线拍揄自揄拍视频 | 亚洲91精品| 国产精品视频999 | 精品在线一区 | 亚洲一区二区免费 | av超碰在线 | 国产激情一区二区三区 | 成人中文网 | 欧美日韩视频一区二区 | 91精品国产色综合久久不卡98口 | 婷婷成人免费视频 | 免费在线黄 | 99热在线国产 | 日本一区二区三区免费观看 |