C C 版選擇排序

2021-10-01 23:51:59 字數 2297 閱讀 2911

選擇排序實現如下:

#include

#include

using

namespace std;

constexpr

int _greater_ =0;

//從大到小排序的指示碼

constexpr

int _less_ =1;

//從小到大排序的指示碼

//選擇排序

template

<

typename datatype>

void

selectionsort

(datatype *array,

int len,

int comp)

}//將找尋到的此趟最大元素與最左邊的元素進行交換,即:將最大值放到陣列最左邊

datatype temp = array[maxvalueindex]

; array[maxvalueindex]

= array[j]

; array[j]

= temp;}}

//從小到大

if(comp == _less_)

}//將找尋到的此趟最小元素與最左邊的元素進行交換,即:將最小值放到陣列最左邊

datatype temp = array[minvalueindex]

; array[minvalueindex]

= array[j]

; array[j]

= temp;}}

}int

main

(int argc,

const

char

*ar**)

;selectionsort

(array,

sizeof

(array)

/sizeof

(int

),_greater_)

;for

(int i =

0;i <

sizeof

(array)

/sizeof

(int);

++i)

cout

}

上述選擇排序介面的使用方法:selectionsort(引數1,引數2,引數3),其中引數1是指需要被排序的陣列,引數2是指該陣列的長度,引數3是指排序的順序(即從大到小或從小到大),該順序由上述自定義的指示碼決定。

選擇排序的思路(以從大到小順序為例):

選出陣列中最大的項,並將之與第一項交換(或稱之為將最大項放到陣列的最左邊),然後再選出剩餘那一部分元素中的最大值,將之放到剩餘這一部分陣列的最左邊…依次進行上述的操作,直至將所有區段的最大元素都放到了相應區段的最左邊為止,此刻排序結束,結果為從大到小順序排列。

例如(以陣列a:【1 0 200】為例):

第一趟:找到陣列a中的最大項(即上述陣列a中值為200的項),將此項與陣列a中的首項(即值為1的項)交換。結果,陣列a變為:【200 0 1】。

第二趟:取陣列a中的【0 1】為新的目標陣列(因為第一趟我們已經將陣列a中的最大項放到了最左邊,接下來我們要在除該最大項外的次最大項,所以我們現在要操作的目標已經不是陣列a,而是陣列a**首項之外的部分陣列),同樣,對於【0 1】我們也做與第一趟一樣的操作(找其中的最大值項,進行與首項的交換),於是我們找到其中的最大值項(即值為1的項),然後將該項與該部分陣列中的首項(即值為0的項)進行交換。結果,該部分陣列變為【1 0】。

第三趟:同樣,再次得到新的部分陣列,同樣找尋其中的最大值項,由於此時陣列長度為1(只有乙個元素),所以它的最大值項就是0。

通過上述三趟過程,陣列a從原先的【1 0 200】變成了【200 1 0】。

這個簡單的例子,就已經充分說明了選擇排序的原理:依次選出每一部分的最大值,將之依次放到每一部分的最左邊,就好似力氣最大的人站在最左邊,力氣第二大的人站在力氣最大的人的後面,力氣第三大的人站在力氣第二大的人的後面…依次排列,於是這個隊伍最後就按照力氣從大到小的順序進行排列了。

c c 選擇排序 SelectionSort

選擇排序原理是,先選取第乙個數與其他所有數比較,把比較後的最小的數與第乙個數交換,這樣每執行一次迴圈就會將最小的數排到最左邊,並且下一次迴圈比較時就會從第二個數再進行比較,也就是少比較一次,同氣泡排序的迴圈體一樣,也分為外迴圈和內迴圈,外迴圈每排出乙個最小的數,內迴圈就會減少一次迴圈,迴圈體 csh...

C C 版插入排序

插入排序實現如下 include include include using namespace std 控制排序順序的指示碼 enum comptype 插入排序 template typename datatype void insertsort datatype array,int len,i...

c c 語言選擇排序

include 選擇排序 思想 每一趟從待排序的資料元素中選出最小的或者最大的乙個元素,順序放在已經排放好序的數列的最後,直到待排序的資料元素排完,選擇排序是不穩定的排序方法 using namespace std void println int array,int len 打乙個輔助函式,列印這...