選擇排序(Selection Sort)的基本思想是
常用的選擇排序方法有直接選擇排序和堆排序
直接選擇排序(Straight Selection Sort)
n個記錄的文件的直接選擇排序可經過n
①初始狀態
②第
在無序區R[
增加
……
③第i趟排序
第i趟排序開始時
的記錄R[k]
這樣
對初始關鍵字為
直接選擇排序的具體算法如下
void SelectSort(SeqList R)
{
int i
for(i= k=i; for(j=i+1;j<=n;j++) //在當前無序區R[i..n]中選key最小的記錄R[k] if(R[j].key k=j; //k記下目前找到的最小關鍵字所在的位置 if(k!=i){ //交換R[i]和R[k] R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暫存單元 } //endif } //endfor } //SeleetSort 4、算法分析 (1)關鍵字比較次數 無論文件初始狀態如何,在第i趟排序中選出最小關鍵字的記錄,需做n-i次比較,因此,總的比較次數為: n(n-1)/2=0(n 2 ) (2)記錄的移動次數 當初始文件為正序時,移動次數為0 文件初態為反序時,每趟排序均要執行交換操作,總的移動次數取最大值3(n-1)。tw.WiNgWIt.Com 直接選擇排序的平均時間復雜度為O(n 2 )。 (3)直接選擇排序是一個就地排序 (4)穩定性分析 直接選擇排序是不穩定的 【例】反例[2, 2 ,1]
From:http://tw.wingwit.com/Article/program/sjjg/201311/23782.html