演算法(4)計數排序

2021-08-11 19:11:42 字數 969 閱讀 3984

計數排序不需要進行比較(//說實話,看到這句話的時候,我也是挺懵的,不比較怎麼進行排序啊!),所以計數排序是有一定限制的。首先,計數排序必須是整數,範圍為[0,max](//個人覺得這裡的max其實也隱含了乙個比較的過程)。想法是這樣的,陣列中的元素按大小排前面有幾個,就把該元素放在新陣列相應的位置。

計數排序的操作是這樣的:

已知原陣列的大小和最大的數,比如,最大的數是12。

然後建立乙個計數陣列,初始化元素為0,其大小為原陣列的最大的數,比如說 int count[12]。然後,對原陣列中的數進行統計,如果原陣列中有這個元素就在計數陣列中+1,比如原陣列中有2,  4,4,5,  5,  5,那麼count[2]=1,count[4]=2,count[5]=3。

下一步,求和,count[i]=count[i]+count[i-1],遍歷後,count陣列中元素表示原陣列中<=i 的元素的個數。

最後一步,將元素放入新陣列中相應的位置,根據count陣列。

廢話不說,上**://需要注意的是,sorted[count[original[i]]-1]=orignal[i] ,這裡需要-1,

比如說original[0]

=0且只有乙個,那麼count[0]=1,但是在新陣列中還是要放在sorted[0]的位置,就是說差乙個。 

#include using namespace std;

void showarray(int *a,int len)

return max;

}void countingsort(int *original,int *sorted,int len,int max)

}int main()

,b[8];

showarray(a,8);

countingsort(a,b,8,findmax(a,8));

showarray(b,8);

return 0;

}

排序專題4 計數排序

1 基於比較的排序 基於比較的排序有很多 如 插入排序 選擇排序 選擇排序 歸併排序 基於非比較的排序 如 基數排序 桶排序 計數排序 對於n個待排序元素,在未比較時,可能的正確結果有n 種。在經過一次比較後,其中兩個元素的順序被確定,所以可能的正確結果剩餘n 2種 確定之前兩個元素的前後位置的情況...

演算法 排序 計數排序

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數。計數排序 counting sort 是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i...

演算法 排序 計數排序

計數排序的核心思想就是將需要排序的陣列的元素轉為下標,在輔助空間陣列 輔助空間陣列的初始都是0 中找到對應元素的下標位置,將該位置的元素 掃瞄下標,將對應不為0的下標記錄賦值給原陣列,然後對應下標元素 圖例分析 具體 includevoid countsort int a,int len int m...