//
// created by liyuanshuo on 2017/3/18.
//#include #include #include #include "radix_sort.h"
/* *
* 基數排序是另外一種比較有特色的排序方式,它是怎麼排序的呢?
* 我們可以按照下面的一組數字做出說明:12、 104、 13、 7、 9
* * (1)按個位數排序是12、13、104、7、9
* * (2)再根據十位排序104、7、9、12、13
* * (3)再根據百位排序7、9、12、13、104
* * 但是上一輪排序的時候09是排在07後面的;同樣舉乙個例子,12和13在十分位都是1,但是由於上一輪12是排在13前面,
* 所以在十分位排序的時候,12也要排在13前面。
* * 所以,一般來說,10基數排序的演算法應該是這樣的
* * (1)判斷資料在各位的大小,排列資料;
* * (2)根據1的結果,判斷資料在十分位的大小,排列資料。如果資料在這個位置的餘數相同,那麼資料之間的順序根據上一輪的排列順序確定;
* * (3)依次類推,繼續判斷資料在百分位、千分位......上面的資料重新排序,直到所有的資料在某一分位上資料都為0
* */
/* * a)計算在某一分位上的資料
*/int pre_process_data( int array, int length, int weight )
for ( index = 0; index < length; ++ index)
for (index = 0; index < length; ++index)
return 0;}/*
* b)對某一分位上的資料按照0~10排序
*/void sort_for_basic_number( int array, int length, int swap )
} }memmove (array, swap, sizeof (int) * length);}/*
* * c)根據b中的排序結果,對實際的資料進行排序
* */
void sort_data_by_basic_number( int array, int data, int swap, int lenght, int weight )
for ( outer = 0 ; outer < lenght ; outer++ )
}} memmove (array, swap, sizeof (int)*lenght );}/*
* * d)把a、b、c組合起來構成基數排序,直到某一分位上的資料為0
* */
void radix_sort( int array, int length )
pdata = (int *)malloc(sizeof (int) * length);
assert(null != pdata);
memmove (pdata, array, length* sizeof (int));
swap = (int*)malloc (sizeof (int)*length);
assert (null != swap );
while ( 1 )
free (pdata);
free (swap);
return;
}
基數排序總結
1 這是一種穩定的排序 將陣列元素從個位開始逐一的使用計數排序將陣列元素按照所選位上值的大小從小到大進行排序 需要定義乙個二維陣列來儲存相應位數值相同的陣列元素 每一維申請的長度為需排序陣列元素數加1,因為用0號位置元素來儲存元素個數 然後遍歷二維陣列,有序的將元素賦到待排序陣列中,再對每一元素從個...
排序 基數排序
基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...
排序 基數排序
1 基數排序 桶排序 介紹 1 基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用 2 基數排序法是屬於穩定性的排序,基數...