首先使用基數r=10進行分解,將每個整數分成d位(d是待排元素中的最大位數),每位的取值範圍是0~9;因為每一位有10種可能的情況,所以建立10個鍊錶,即lists[0]~list[9],分別代表相應位為0、1、2、3、4、5、6、7、8、9。然後執行下列步驟:
(1)第一趟:按照個位數,將元素放入相應鍊錶中,若元素的個數為0,則放入鍊錶lists[0]中,若元素的個數為1,則放入鍊錶lists[1]中………………;然後按照鍊錶的順序(lists[0]->list[1]->list[2]………….)將鍊錶中的元素重新拿出來,此時全部元素已經按個位排好序。
(2)第二趟:將(1)得到的整數序列按照十位數,將元素放入相應鍊錶中,若元素的十數為0,則放入鍊錶lists[0]中,若元素的十數為1,則放入鍊錶lists[1]中………………;然後按照鍊錶的順序(lists[0]->list[1]->list[2]………….)將鍊錶中的元素重新拿出來,此時全部元素也按十位排好序。
. .
. .
總共進行d趟排序。
經過d趟排序後,此時所有元素的每一位都排好序,即所有元素有序。
#include
#include
using
namespace
std;
int maxdigit(int data,int n)
} return d;
}void radixsort(int data,int n)
//---把煉表裡的元素重新拿出來---
int k=0;
for(int j=0;j<10;j++)
}//---檢視中間結果----
演算法 排序之基數排序
基數排序也是穩定的內排序。因為它的實現是基於內部使用了穩定的排序實現的所以基數排序整體是穩定的,而且時間複雜度為o n 舉個例子 現在我們將一些3 多 位數排序,如果你說直接判斷就好的話,那你就太天真了,因為那就又變成看o nlgn 或者o n 如何能降低時間複雜度變成o n 呢?那就要使用線性時間...
排序演算法之基數排序
首先從多排序碼排序開始介紹基數排序。以撲克牌排序為例。每張撲克牌有兩個 排序碼 花色和面值。其有序關係為 如果把所有撲克牌排成以下次序 2,a,2,a,2,a,2,a 這就是多排序碼排序。排序後形成的有序序列叫做字典有序序列。一般情況下,假定有乙個n個元素的序列 v 0,v1 vn 1 且每個元素v...
排序演算法之基數排序
如果我們要排序的資料具有多個關鍵字域,那就可以採用基數排序的方法了。基數排序的主要思想是 假如參加排序的元素最高具有d位,有的數沒有d位那麼多,則在其欠缺的高位補0,將元素先按最低位 設最右邊的位為最低位 的值進行排序,然後按次低位進行排序.最後進行最高位的排序。基數排序如果想達到理想的目的,必須滿...