【算法导论】C++参考源码之线性时间排序

来源:互联网 发布:金融网络销售靠谱吗 编辑:程序博客网 时间:2024/04/30 14:46

计数排序:

#include <iostream>using namespace std;void counting_sort(int A[], int B[], int k, int size){int* C = new int[size];for (int i = 0; i < k + 1; ++i)// 第一步{C[i] = 0;}for (int j  = 0; j < size; ++j)// 第二步{++C[A[j]];}for (int i = 1; i < k + 1; ++i)// 第三步{C[i] = C[i] + C[i - 1];}for (int j = size - 1; j > -1; --j)// 第四步{B[C[A[j]] - 1] = A[j];--C[A[j]];}delete[] C;}int main(){int A[] = {2, 5, 3, 0, 2, 3, 0, 3};// 数组A长度int size = sizeof(A) / sizeof(A[0]);// 排序数组 in/outint *B = new int[size];// 数组A最大值int max = A[0];for (int i = 0; i < size; ++i){max = A[i] > max ? A[i] : max;}// 计数排序counting_sort(A, B, max, size);// 输出结果for (int i = 0; i < size; ++i){cout << B[i] << endl;}delete[] B;return 0;}