選擇排序實現如下:
#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 打乙個輔助函式,列印這...