第八章 排序 選擇排序

2021-10-02 04:27:41 字數 1442 閱讀 7986

資料結構基礎** (嚴蔚敏 人郵教育出版社)

簡單選擇排序

#include

intselectionsort

(int a,

int n)

} t=a[i]

; a[i]

=a[minj]

; a[minj]

=t; sw++;}

if(i!= minj)

return sw;

}int

main()

sw=selectionsort

(a,n)

;for

(i=0

;i1;i++

)printf

("%d"

,a[i]);

}printf

("\n");

printf

("%d\n"

,sw)

;}

輸出結果如下:

堆排序

#include

#include

using namespace std;

//堆排序

void

heapadjust

(int a,

int s,

int m)

//函式用來調整堆,使元素稱為大根堆(將a[s...m]調整為以a[s]為根的大根堆。)

if(v>=a[j]

)//如果v大於較大的孩子結點的值,跳出迴圈。說明v的插入位置就是當前s的位置。

a[s]

=a[j]

;//如果v並沒有大於當前孩子結點的值,把v與當前孩子結點位置交換。並且繼續比較

s=j;

//與當前位置s值的兩個孩子的值的大小,知道找到合適的插入位置再跳出迴圈。

} a[s]

=v;//v放置在位置s上

}//建立初始堆

void

creatheap

(int a,

int n)

}//堆排序的實現

void

heapsort

(int a,

int n)

}int

main()

heapsort

(a,n)

;for

(i=1

;i)//輸出時從包含資料元素位置輸出。

printf

("%d"

,a[i]);

}return0;

}

因為第乙個位置a[0]我們不存值,所以輸出的時候為了好看,第乙個輸入了空格。

第八章 排序技術

排序共分為5大類,插入 交換 選擇 歸併 分配。他們的穩定性及平均時間效能如下圖 這是幾種排序演算法的簡單思想 1.直接插入排序 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,直到所有待排序記錄全部插入為止。2.希爾排序 先取乙個小於n的整數d1作為第乙個增量,把...

第八章 排序技術

一 歸併排序 將原序列分成若干個子串行,然後重組 include.h using namespace std const int n 9 int a n int temp n void msortroot int f,int e,int mid while i 排序後有遺漏需再次填入 while j...

第八章 線性時間排序

這章剛開始證明了基於比較的排序的演算法在最壞情況下,都需要做nlgn次比較。由此可以推出合併排序快速排序都是漸進最優的比較排序演算法。線性時間排序 1.計數排序 計數排序假設n個輸入元素中的每乙個都是介於0 k之間的整數,此處k為某個整數。當k o n 時,計數排序的執行時間為o n 計數排序的思想...