基数排序

来源:互联网 发布:淘宝女装上下架时间 编辑:程序博客网 时间:2024/06/03 15:41
#include <iostream>#include <list>using namespace std;int maxdigit(int data[], int n){int d = 1;int p = 10;for(int i = 0; i < n; ++i){while(data[i] >= p){p *= 10;++d;}}return d;}void radixsort(int data[], int n){int digits = maxdigit(data,n);list<int> lists[10];int d,j,k,factor;for(d =1,factor=1; d<=digits; factor*=10,d++){for(j = 0; j < n; j++){lists[(data[j]/factor)%10].push_back(data[j]);}for(j = k =0;j<10;j++){while(!lists[j].empty()){data[k++] = lists[j].front();//这个是将自己建的list的头一个数值传输到原来的数据中,这里的【k++】【j++】都是指的下标,lists[j].pop_front(); // 这里是指将自己建的list的数据删除掉,}}//for(int m = 0; m < n; m++)  // 这个for循环是将中间排序的结果输出的,//cout<< data[m] << " ";//cout << endl;}}int main(){int data[] = { 179,208,306,93,859,984,55,9,271,33 };radixsort(data,10);for(int i = 0; i < 10; i++)cout << data[i] << " ";cout << endl;return 0;}

0 0
原创粉丝点击