基于计数排序子程序的基数排序实现

来源:互联网 发布:python for quants 编辑:程序博客网 时间:2024/05/21 11:12
#include "stdafx.h"#include <iostream>#include <math.h>using namespace std;#define RADIX 3#define LENGTH 7int A[LENGTH] = { 329, 457, 657, 839, 436, 720, 355 };// copy a[] into b[]void CopyArray(int* a, int* b){for (int i = 0; i < LENGTH; ++i) {b[i] = a[i];}}void PrintArray(int* a){for (int i = 0; i < LENGTH; ++i) {cout << a[i] << " ";}cout << endl;}//返回整型a的第i位数//GetDigitI(790,3) = 7//GetDigitI(790,2) = 9//GetDigitI(790, 1) = 0int GetDigitI(int a, int i){return (a / (int)pow(10, i-1)) % 10;}//计数排序void CountingSort(int* a, int i){int B[LENGTH] = { 0 }; //存本次的排序结果int C[10] = { 0 }; //用于统计的辅助数组//统计第i位上的值出现次数for (int k = 0; k < LENGTH; ++k) {int t = GetDigitI(a[k], i);C[t] += 1;}//累加for (int k = 1; k < 10; ++k) {C[k] = C[k] + C[k - 1];}//根据累加数组C,对a进行排序,结果在B中for (int k = LENGTH-1; k >= 0; --k) {int t = GetDigitI(a[k], i);B[C[t] - 1] = a[k];C[t] -= 1;}CopyArray(B,a);}//基数排序void RadixSort(){int* t = A;for (int i = 1; i <= RADIX; ++i) {//Use Counting sort to sort array A on digit iCountingSort(t, i);cout << "Result " << i <<": \n";PrintArray(A);}}int _tmain(int argc, _TCHAR* argv[]){PrintArray(A);RadixSort();return 0;}

0 0
原创粉丝点击