排序演算法之基數排序

2022-02-14 19:07:28 字數 1465 閱讀 8883

基數排序思想很簡單,直接上**:

view code

1 #include 

2 #include

3 #include 45

#define n 16 /*字串個數*/

6#define m 3 /*每個字串的字元個數*/7/*

* author: mike feng

8* 基數排序:對元素每一位進行排序9*/

1011

/*列印

*/12

void print(char ** a)

13 19

20/*

只是交換指標,因為a對應的字串在唯讀區,不能更改

*/21

char **exchange(char **a,int i,int j)

22 31

/*比較該位前面各位的字元是否相等

*/32

int cmpa(char **a,int d,int i1)

33 40

return

1;41 }

4243

int partition(char **a,int d,int p,int r)

44 60

if(a[j][d]>t)

61 a=exchange(a,j,r);

62 }

63else

/*d>0,即d==0的位已經排好順序

*/64

83 a=exchange(a,j,i2);

84 i1=i2+1;

85 }

86 }

87return j;

8889 }

9091

/*每一位應用快排

*/92

void quick_sort(char **a,int i,int p,int r)

93 99 }

100/*

基數排序

*/101

char** radix_sort(char **a,int d)

102

108109

110int main(void)

111 ;

113 printf("

%s\n

","排序前:

");114 print(a);

115 radix_sort(a,3);

116 printf("

%s\n

","排序後:

");117 print(a);

118119

return

0;120 }

執行結果:

演算法 排序之基數排序

基數排序也是穩定的內排序。因為它的實現是基於內部使用了穩定的排序實現的所以基數排序整體是穩定的,而且時間複雜度為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,將元素先按最低位 設最右邊的位為最低位 的值進行排序,然後按次低位進行排序.最後進行最高位的排序。基數排序如果想達到理想的目的,必須滿...