排序 (5)计数排序“概念”
生活随笔
收集整理的這篇文章主要介紹了
排序 (5)计数排序“概念”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 應用場景
一是需要排序的元素必須是整數,二是排序元素的取值要在一定范圍內,并且比較集中。
1.1 思想
step1. 統計數組中每個值為 X 的元素出現的次數,存入數組 C 的第X 項
step2. 累加元素出現次數(計算不超過 X包括X 的元素的個數)
step3. 反向填充目標數組:將元素X依次逐個放入到適當的位置
1.2 min優化
空間不一定需要max那么多個。計算max-min個即可。
void countSort(int arr[], int len) {//1.獲得數列的最大值和最小值int max = arr[0];for (int i = 1; i < len; i++) {if (arr[i] > max)max = arr[i];} int min = arr[0];for (int i = 1; i < len; i++) {if (arr[i] < min)min = arr[i];}//2.初始化計數數組count的長度int* countArray = new int[max - min + 1]{};//3.遍歷數列,填充統計數組for (int i = 0; i < len; i++)countArray[arr[i] - min]++;// A中的元素要減去最小值,再作為新索引//4.遍歷統計數組,輸出結果int index = 0;for (int i = 0; i < max + 1; i++) {while (countArray[i] > 0) {arr[index++] = i + min;countArray[i]--;}}}【引用】
[1] 代碼countSort.h
總結
以上是生活随笔為你收集整理的排序 (5)计数排序“概念”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kth (1)概述
- 下一篇: 排序 (2)快速排序-多个数组