计数排序

来源:互联网 发布:java如何进行异常处理 编辑:程序博客网 时间:2024/04/30 06:53

在已知待排序的元素范围为0-k之间时,可使用计数排序。当k=O(n)时,此时运行时间为Θ(n)。思路是:记录对应元素出现的次数,则可以推算出改元素在排序后中的数组的下标。

void counting_sort(vector<int>& A, vector<int>& B, int k){    vector<int> C(k + 1, 0);    for (int i = 0; i < A.size(); i++)        C[A[i]]++;    for (int i = 1; i < C.size(); i++)        C[i] += C[i - 1];    for (int i = A.size() - 1; i >= 0; i--){        B[C[A[i]]-1] = A[i];        C[A[i]]--;    }}int main(){    srand(time(0));    vector<int> nums(10);    for (int i = 0; i < nums.size(); i++){        nums[i] = rand() % 20;    }    for (auto val : nums)        cout << val << " ";    cout << endl;    vector<int> B(10);    counting_sort(nums, B, 20);    cout << "counting-sort: " << endl;    for (auto val : B)        cout << val << " ";    cout << endl;    return 0;}

计数排序示例

0 0
原创粉丝点击