基数排序

来源:互联网 发布:java基础教程 pdf下载 编辑:程序博客网 时间:2024/05/29 09:53

题目:用基数排序法给n个数排序,每个元素不超过100000

输入要求:

There are multiple cases.

For each case, the first line is an integer n. The next line contains a[i] (1<=i<=n, 1<=a[i]<=100000) to be sorted.


基数排序,我们按照低位到高位的数字一位位运算,依次入队出队。

下面来模拟一下该过程,比如初始序列是91  6  85  15  92  35  30  22  39,我们先给低位排序,

第一次排序:

              出队后序列为30  91  92  22  85  15  35  6  39,下面我们再来给高位排序,

第二次排序:
                         
            出队后序列为6  15  22  30  35  39  85  91  92
#include <iostream>#include <queue> using namespace std;int main(){    int n;      while(cin>>n)    {        int *a = new int[n];        queue<int> q[10];    //10个对应于位的队列         for(int i=0;i<n;i++)          cin >> a[i];                  for(int pos=1; pos<=6; pos++)        {            for(int i=0;i<n;i++){       //按位取数入栈                 int getp, temp=1, num=a[i];                for (int i = 0; i < pos - 1; i++)                    temp *= 10;                getp = (num/temp) % 10;                q[getp].push(a[i]);            }                        int k=0;            for(int i=0;i<10;i++)             {                while(!q[i].empty()){   //先取队首元素保存在数组,再出栈                     a[k++] = q[i].front();                    q[i].pop() ;                }            }        }        for(int i=0;i<n-1;i++)          cout << a[i] <<" ";        cout << a[n-1] << endl;  //末尾没有空格         delete []a;    }        return 0;}                                 

0 0
原创粉丝点击