【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
生活随笔
收集整理的這篇文章主要介紹了
【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
十大經(jīng)典排序算法系列博客——>傳送門
基數(shù)排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優(yōu)先級順序的,先按低優(yōu)先級排序,再按高優(yōu)先級排序。最后的次序就是高優(yōu)先級高的在前,高優(yōu)先級相同的低優(yōu)先級高的在前。
算法步驟:
-
取得數(shù)組中的最大數(shù),并取得位數(shù);
-
arr為原始數(shù)組,從最低位開始取每個位組成radix數(shù)組;
-
對radix進行計數(shù)排序(利用計數(shù)排序適用于小范圍數(shù)的特點);
代碼展示
#include<iostream> using namespace std; int date[100],count[10],l; //date[]保存數(shù)值 count[]記錄對應基數(shù)數(shù)量 l記錄最大數(shù)的長度 void basesort(int n){int num = 1;int temp[10][n];for(int i = 0 ; i < l ; i++){//控制趟數(shù)for(int j = 0 ; j < 10 ; j++){count[j] = 0;} for(int k = 0 ; k < n ; k++){ //選取對應基數(shù) int f = date[k] / num % 10;temp[f][count[f]] = date[k];count[f] ++; }int ind = 0;for(int j = 0 ; j < 10 ; j++){//重新賦值 for(int k = 0 ; k < count[j];k++){date[ind++] = temp[j][k]; }}num = num * 10; } } int main(){int n;cin >> n;int max = -0xffff;for(int i = 0 ; i < n ; i++){//輸入 cin >> date[i];if(date[i] > max){max = date[i];}}while(max > 0){ //求最大數(shù)長度 max = max /10;l++;}//cout << l<<endl;驗證長度是否正確basesort(n);//調(diào)用基數(shù)排序方法 for(int i = 0 ; i < n ; i++){ //輸出 cout << date[i]<<" ";}return 0; } /* 測試用例 6 433 5 12 3 22 345 */日拱一卒,功不唐捐。
總結(jié)
以上是生活随笔為你收集整理的【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++实现桶排序——十大经典排序算法之九
- 下一篇: 【完整可运行源码+GIF动画演示】十大经