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...