十大經典排序演算法(十 基數排序)

2022-07-15 00:06:28 字數 2058 閱讀 1444

基數排序是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。

基數排序有兩種方法:

這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異:

1 ar counter =;

2function

radixsort(arr, maxdigit)

11counter[bucket].push(arr[j]);12}

13var pos = 0;

14for(var j = 0; j < counter.length; j++) 20}

21}22}

23return

arr;

24 }

1 #include2

#define max 203//

#define showpass

4#define base 1056

void print(int *a, int

n) 11}12

13void radixsort(int *a, int

n) 20}21

22while (m / exp > 0

) ;24

25for (i = 0; i < n; i++)

2829

for (i = 1; i < base; i++)

3233

for (i = n - 1; i >= 0; i--)

3637

for (i = 0; i < n; i++)

4041 exp *=base;

4243

#ifdef showpass

44 printf("

\npass : ");

45print(a, n);

46#endif47}

48}4950

intmain()

6263 printf("

\narray : ");

64 print(&arr[0

], n);

6566 radixsort(&arr[0

], n);

6768 printf("

\nsorted : ");

69 print(&arr[0

], n);

70 printf("\n"

);71

72return0;

73 }

1

int maxbit(int data, int n) //

輔助函式,求資料的最大位數210

int d = 1;11

int p = 10;12

while (maxdata >=p)

1318

return

d;19

/*int d = 1; //儲存最大的位數

20int p = 10;

21for(int i = 0; i < n; ++i)

2228}29

return d;

*/30}31

void radixsort(int data, int n) //

基數排序

3247

for(j = 1; j < 10; j++)

48 count[j] = count[j - 1] + count[j]; //

將tmp中的位置依次分配給每個桶

49for(j = n - 1; j >= 0; j--) //

將所有桶中記錄依次收集到tmp中

5055

for(j = 0; j < n; j++) //

將臨時陣列的內容複製到data中

56 data[j] =tmp[j];

57 radix = radix * 10;58

}59delete

tmp;

60delete

count;

61 }

十大經典排序演算法 基數排序

一 演算法複雜度 二 實現流程 1 尋找最長元素的位的數量 2 按照最低位值的大小進行排序,然後再按照次高位的值排序 3 直到每乙個位都比較之後就能得到最終的排序結果 三 實現 import numpy as np def radix sort arr max val arr 0 獲取最大值 max...

十大經典排序演算法 基數排序01

基數排序是按照低位先排序,然後收集 再按照高位排序,然後再收集 依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優先順序排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。演算法步驟 將所有待比較數值 正整數 統一為同樣的數字長度,數字較短的...

十大經典排序演算法之基數排序 python

原理 a 1,20,36,44,6,9,102,86,94,5 乙個即將排序的陣列a,準備一排0 9依次排好序的桶,先判斷a陣列中每個元素個位數的值,然後填入對應的桶裡,填完之後再從左到右依次從桶裡取出來 接著對新排好序的陣列從十位判斷,位數不夠預設為0,以此迴圈,直到a陣列中最大的元素的最高位排完...