基于桶排序的基数排序

来源:互联网 发布:网络大电影预算表图 编辑:程序博客网 时间:2024/05/16 23:49

           基于桶排序的基数排序时间复杂度可以控制在O(N),空间为N,同时还以一种稳定的排序算法。至于原理这里就不赘述了,网上很多,可以自己看看,这里贴出我实现的程序。

//使用桶排序和基数排序进行排序//时间的d*2n  d:元素的最大位数  n:元素的个数#include "stdafx.h"#include <iostream>#include <list>#include <math.h>#include <time.h>using namespace std;#define LENGTH 100000void BucketSort(int *arr, int length, int position){list<int> buck[10];  //按基数10排序,需要10个桶for(int i=0;i!=length;i++){int k=(arr[i]/(int)pow(double(10),position))%10;buck[k].push_back(arr[i]);}int k=0;//将桶中的元素放回到数组中    for(int i=0;i!=10;i++){while(!buck[i].empty()){arr[k]=*(buck[i].begin());buck[i].pop_front();k++;}}}void RadixSort(int *arr, int length, int weight){if(arr==NULL||length<=0)return;for(int i=0;i<weight;i++)  //进行weight趟排序BucketSort(arr,length,i);}int _tmain(int argc, _TCHAR* argv[]){srand((unsigned int)time(NULL));int *arr=new int[LENGTH];for(int i=0;i!=LENGTH;i++){arr[i]=rand();}RadixSort(arr,LENGTH,5);for(int i=1;i!=LENGTH;i++){cout<<arr[i]<<endl;}return 0;}


 

原创粉丝点击