/*
計數排序:n個元素都是0到k範圍得整數,當k=o(n)時,排序執行時間為o(n)
思想:對於數x,確定小於x的個數m,將x放在第m+1個位置上
例子:假設3個元素小於x,那麼x應該放在4上
輸入第一行的第乙個數n是陣列的個數,第一行第二個數表示所有n的元素中最大的數k
接下來的第二行就是n個數字
輸入:8 5
2 5 3 0 2 3 0 3
輸出:0 0 2 2 3 3 3 5
*/#include #include #include using namespace std;
void countsort(int* parr, int n, int k)
//計數
for(int i = 0 ; i < n ; i++)
//生成每個元素x小於等於x的個數,這裡才用從前向後累加的方式,例如c[1]=c[1]+c[0]=1+1,<=1的元素個數為2,
//c[2]=c[2]+c[1]=1+2=3,注意k必須取到
for(int i = 1 ; i <= k ; i++)
//對計數陣列進行排序,輸入到中間陣列b中,該陣列的長度為n,在該陣列中採用從後向前輸出
int* barr = new int[n];
for(int i = n - 1 ; i >= 0 ; i--)
//此時b陣列中就是結果
for(int i = 0 ; i < n ; i++)
delete barr;
delete carr;
}void print(int* parr,int n)
}void process()
countsort(parr , n , k);
print(parr , n);
delete parr; }}
int main(int argc,char* argv)
《演算法導論》第8章 線性時間排序 1 計數排序
一種簡單的實現是得到陣列c,c i 表示陣列a中值為i的元素個數。c 就表示兩個0,兩個2,三個3,乙個5。然後將這些數字依次存到陣列b中。include include void printarray int,int void counting sort int a,int b,int len,i...
演算法導論 第8章 線性時間排序
比較排序指在排序的最終結果各元素的次序依賴於它們之間的比較的排序演算法。在最壞情況下,任何比較排序演算法都需要做 nlgn 次比較。因此堆排序和歸併排序都是漸近最優的比較排序演算法。本章討論三種用運算而不是比較來確定排序順序的線性時間複雜度的排序演算法 計數排序假設n個輸入元素中的每乙個都是在0 k...
演算法導論第8章線性時間排序 Python實現
計數排序 def counting sort a,b,k c 0 for i in range k length len a for i in range length c a i 1for i in range 1 k c i c i c i 1 for i in range k c i 1 fo...