CLRS 8 3基數排序

2021-07-06 04:14:18 字數 1527 閱讀 7840

8.3-1

從左到右分別是原始排序,第一輪、第二輪和最終排序。

穩定:插入排序,歸併排序。不穩定:堆排序,快速排序。

通過給每個元素新增乙個最初位置屬性,當元素值相等時比較初始位置。從而使得排序穩定,需要額外空間 θ(

n)。8.3-3

從低到高位排序,現在假設第

t 位已經排序好,並且是穩定的排序。在第 t+

1位:

1) 第 t+

1 位需要排序的數相等,不需要變動第 t+

1 位,且第

t 位是穩定的排序,因此第 t+

1位也是穩定的排序。

2)第 t+

1 位需要排序的數不相等,對第 t+

1 位進行排序,可知排序後第 t+

1 位是穩定的。

綜上,可知基數排序是正確的。

8.3-4

使用基數排序,將每個數轉換為

n 進製,則每個數占 3 位。這樣就有 θ(

3(n+

n))=

θ(6n

)=θ(

n)。8.3-5

一共進行 θ(

10d) 次排序。需要記錄 θ(

10d) 堆卡片。

附上10進製數的基數排序(只能排序自然數)

#include 

using

std::cout;

using

std::endl;

//輔助函式,求n個資料的最大數的位數

int maxbit(int *data,int begin,int end)

}return res;

}/***基數排序,不能含有負數*******************

****排序陣列的begin到end位置的數(不含end)**

*****************************************/

void radixsort(int data, int begin,int end)

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

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

for(int j = end - 1; j >= begin; j--)

for(int j = begin; j < end; j++)//將臨時陣列的內容複製到data中

data[j] = tmp[j-begin];

radix *= 10;

}delete tmp;

delete count;

}int main()

; radixsort(ia,2,7);

for(int i = 0; i < 7; i++)

cout

<< ia[i] << ' ';

return

0;}

演算法導論CLRS 8 3 基數排序

8.3 基數排序 radix sort include include include includeusing namespace std typedef vector iterator tvecite typedef vector iterator tvecpite void radixsort...

8 3基數排序

一.問題 現在有n個位數為d的x進製的數,把這些數進行排序。如 現有陣列a 其元素均為16進製制數,最大位數為4,一共4個元素。二.思路 以為例,一位一位的排 從低位到高位 最終順序即為所求。三.步驟 1.開始算個位 a i0 1234 ai52 135132 250150 b1 統計上面5個數的個...

排序 基數排序

基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...