【資料結構】計數排序
阿新 • • 發佈:2018-11-16
- 概念:
- 計數排序,又稱為鴿巢原理,是對雜湊定址法的變形應用。
- 核心思想是:
- 具體程式碼如下:
void CountSort(int* a, int n)//計數排序 { int max = a[0]; int min = a[0]; for (int i = 0; i < n; i++) { if (a[i]>max) { max = a[i]; } if (a[i] < min) { min = a[i]; } } int range = max - min + 1; int* countArray = (int*)malloc(sizeof(int)*range); memset(countArray, 0, sizeof(int)*range);//把新開闢的陣列初始化為0 for (int i = 0; i < n; i++)//遍歷原陣列統計每個數字出現的次數 { countArray[a[i] - min]++; } int index = 0; for (int i = 0; i < range; i++)//遍歷範圍,對原陣列進行排序 { while (countArray[i]--) { a[index] = i + min; index++; } } }
- 計數排序總結:
1.計數排序在資料範圍集中時,效率很高,但是適用範圍及場景有限
2.時間複雜度: O(MAX(N,範圍))
3.空間複雜度: O(範圍)~
4.穩定性: 穩定