基數排序c++實現
阿新 • • 發佈:2017-10-20
復雜 -- cpp ++ stream c++實現 sin logs 中心
//中心思想,按照低位先排序,然後收集,再按照高位排序,然後再收集, //以此類推,直到最高位,是穩定算法,效率很高,復雜度是O(n㏒(r)m),r為采取的基數 //m為堆數,但是只能用在整數中,且需要一定的輔助空間 //下面是代碼: #include<iostream> using namespace std; //尋找數組中最大數的位數作為基數排序循環次數 int KeySize(int a[],int n) { int key=1; for(int i=0;i<n;i++) { int temp = 1; int r=10; while(a[i]/r>0) { temp++; r*=10; } key=(temp>key)?temp:key; } return key; } //基數排序 void RadixSort(int a[],int n) { int key=KeySize(a,n); int bucket[10][10]={0}; int order[10]={0}; for(int r=1;key>0;key--,r*=10) { for(int i=0;i<n;i++) { int lsd =(a[i]/r)%10; bucket[lsd][order[lsd]++]=a[i]; } int k=0; for(int i=0;i<10;i++) { if(order[i]!=0) { for(int j=0;j<order[i];j++) a[k++]=bucket[i][j]; } order[i]=0; } } } int main() { int arr[10]={ 223,534,654,876,345,123,543,675,435,67 }; RadixSort(arr,10); for(int i=0;i<10;i++) cout<<arr[i]<<" "; return 0; }
基數排序c++實現