【排序】基数排序

来源:互联网 发布:剑网3天策数据 编辑:程序博客网 时间:2024/05/01 13:08
#include<iostream>using namespace std;//求数据的最大位数int get_max_bit(int nums[], int len){    int count;    int max = 1;    int* temp = new int[len];    for (int i = 0; i < len; i++)        temp[i] = nums[i];    for (int i = 0; i < len; i++){        count = 0;        while (temp[i]>0){            temp[i] /= 10;            count++;        }        if (count>max)            max = count;    }    delete[] temp;    return max;}void radix_sort(int nums[], int len){    int i, j, k;    int count[10];//各个桶的数据统计    int radix = 1;//基数    int* buckets = new int[len];    int max_bit = get_max_bit(nums, len);    //按照从低位到高位的顺序执行排序过程    for (i = 1; i <= max_bit; i++){        memset(count, 0, sizeof(count));//置空各个桶的数据统计        for (j = 0; j < len; j++){            k = (nums[j] / radix) % 10;            count[k]++;//统计各个桶将要装入的数据个数        }        //count[j]表示第j个桶的右边界索引        for (j = 1; j < 10; j++)            count[j] += count[j - 1];        //从右向左扫描将数据依次装入桶中,保证排序稳定性        for (j = len - 1; j >= 0; j--){            k = (nums[j] / radix) % 10;            count[k]--;            buckets[count[k]] = nums[j];        }        cout << "按" << i << "位排序:";        //将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表        for (j = 0; j < len; j++){            nums[j] = buckets[j];            cout << nums[j] << "    ";        }          cout << endl;        radix *= 10;    }}int main(){    int nums[] = { 34, 25, 76, 234, 62, 17 };    radix_sort(nums, 6);    cout << "最终排序结果:";    for (int i = 0; i<6; i++)        cout << nums[i] << "    ";    cout << endl;        return 0;}

0 0
原创粉丝点击