演算法導論,習題8 2,計數排序原址排序

2021-06-22 16:49:17 字數 727 閱讀 8166

計數排序:

n 表示 n個數

k 表示n個數的最大值為k-1  

書上用偽**呈現的計數排序是穩定的,但是需要兩個輔助陣列,乙個是n大小,乙個k大小, 習題8-2的e小題需要寫出只用乙個k大小的輔助陣列就可以的計數排序,本以為很簡單,結果想了很久沒想出來,最後還是看了網上的**,真是羞愧,

下面是**

#include#include#include#include "mytimer.h"

#includeusing namespace std;

const int n=100;

int *c=new int[n];

int *b=new int[n];

void countint_sort(int a,int n)

for(int j=0;j!=n;++j)

for(int i=1;i!=n;++i)

for(int j=n-1;j!=-1;--j)

}void countint_sort2(int a,int n)

for(int j=0;j!=n;++j)

for(int i=1;i!=n;++i)

for(int i=0;i!=n;++i)

for(int i=n-1;i!=0;--i)}}

int *a=new int[n];

int main()

for(int i=0;i!=n;++i){

cout<

《演算法導論》筆記 第8章 8 2計數排序

計數排序假設n個輸入元素中的每乙個都是介於0到k之間的整數,此處k為某個整數。當k o n 時,計數排序的執行時間為 n 計數排序是穩定的。void countingsort int a,int b,int n,int k for int j 1 j n j for int i 1 i k i fo...

演算法導論8 2 4習題解答 計數排序

clrs 8.2 4 在o 1 的時間內,回答出輸入的整數中有多少個落在區間 a.b 內。給出的演算法的預處理時間為o n k 演算法思想 利用計數排序,由於在計數排序中有乙個儲存數值個數的臨時儲存區c 0.k 利用這個陣列即可。include iostream using namespace st...

演算法導論 計數排序

不管所堆排序,還是快速排序,排序的本質都所基於各個元素之間的比較。而可以證明的是,所有基於比較的排序演算法,在最壞情況下的時間複雜度的下界是o nlgn 而,計數排序不所基於元素之間的比較,而是,對於乙個輸入x,在整個輸入中確定出小於x的元素個數,這樣就可以把元素x直接放在它在最終輸出陣列中的確定位...