直接選擇排序

2021-06-01 14:06:33 字數 1040 閱讀 6907

設陣列為a[0…n-1]。

1.      初始時,陣列全為無序區為a[0..n-1]。令i=0

2.      在無序區a[i…n-1]中選取乙個最小的元素,將其與a[i]交換。交換之後a[0…i]就形成了乙個有序區。

3.      i++並重複第二步直到i==n-1。排序完成。

直接選擇排序無疑是最容易實現的,下面給出**:

view plain

void

selectsort(

inta, 

intn)  

}  

view plain

inline

void

swap(

int&a, 

int&b)    

筆試面試時考不用中間資料交換二個數,很多人給出了

view plain

inline

void

swap1(

int&a, 

int&b)    

在網上搜尋下,也可以找到許多這樣的寫法。不過這樣寫存在乙個隱患,如果a, b指向的是同乙個數,那麼呼叫swap1()函式會使這個數為0。如:

view plain

inti = 6;  

swap2(i, i);  

printf("%d %d\n"

, i);  

當然誰都不會在程式中這樣的寫**,但回到我們的selectsort(),如果a[0]就是最小的數,那麼在交換時,將會出現將a[0]置0的情況,這種錯誤相信除錯起來也很難發現吧,因此建議大家將交換二數的函式寫成:

view plain

inline

void

swap(

int&a, 

int&b)    

或者在swap1()中加個判斷,如果二個資料相等就不用交換了:

view plain

inline

void

swap1(

int&a, 

int&b)  

}  

選擇排序 直接選擇排序

演算法思想 在每一趟的排序中,從待排序列中選出關鍵字最小或者最大的元素放在其最終的位置上 過程分析 在第i趟直接排序中,通過n i次關鍵字的比較,從n i 1個元素中選出關鍵字最小的元素 與第i個元素進行交換。經過n 1趟比較,直到表有序為止 效能分析 時間複雜度o n 2 include defi...

選擇排序 直接選擇排序

直接選擇排序也成為簡單選擇排序。對於乙個待排序數列,每次從無序區選擇乙個最小的元素,放入有序區 初始時有序區為空 直到無序區元素只有乙個 即整個數列的最大值 具體操作 第i趟排序開始,數列分為有序區a 0,i 1 和無序區a i,n 1 從無序區中選擇最小元素a k 將a k 放在無序區的最左邊的位...

選擇排序 直接選擇排序

直接選擇排序 straight select sorting 也是一種簡單的排序方法,它的基本思想是 第一次從r 0 r n 1 中選取最小值,與r 0 交換,第二次從r r n 1 中選取最小值,與r 1 交換,第i次從r i 1 r n 1 中選取最小值,與r i 1 交換,第n 1次從r n ...