基数排序

来源:互联网 发布:淘宝上买什么 编辑:程序博客网 时间:2024/06/06 12:22
#include "stdafx.h"void Counting_Sort(int a[], int b[], int k, int len){    int c[100] = { 0 }, temp[100] = { 0 };    for (int j = 0; j < len; ++j)                            //统计等于i的个数    {        ++c[a[j]];    }    for (int i = 1; i < k + 1; ++i)                           //统计小于等于i的个数    {        c[i] = c[i] + c[i - 1];    }    for (int i = len - 1; i > -1; --i)                      //从a数组末尾开始赋值    {        temp[c[a[i]] - 1] = b[i];                                //数组序号从0开始,故需先减一;b中元素(原有数组元素)与a中元素(某位元素)对应,因此可以直接将b中元素(原有数组元素)放入暂存数组相应位置        --c[a[i]];    }    for (int i = len - 1; i > -1; --i)                           //再将暂存数组中的元素复制到原有数组中,更新原有数组的排序    {        b[i] = temp[i];    }}void Radix_Sort(int a[],int b[],int d,int len){    for (int i = 1; i < d+1; ++i)                                  //i代表位数    {        for (int m = 0; m < len ; ++m)                             //m代表元素数        {            switch (i)            {            case 1:                b[m] = a[m] % 10;                                 //取最低位                break;            case 2:                b[m] = a[m] / 10 % 10;                            //取第二低位                break;            case 3:                b[m] = a[m] / 100 % 10;                           //取第三低位                break;            case 4:                b[m] = a[m] / 1000 % 10;                          //取第四低位                break;            default:                break;            }        }        Counting_Sort(b, a, 9, len);    }}int _tmain(int argc, _TCHAR* argv[]){    int a[] = { 123, 419, 914, 391, 456, 217, 666, 999 };    int len = sizeof(a) / 4;    int b[sizeof(a) / 4] = { 0 };    Radix_Sort(a, b,3, len);    for (int i = 0; i < len; ++i)    {        cout << a[i] << endl;    }    return 0;}
0 0
原创粉丝点击