默認(rèn)數(shù)組為升序
選擇排序:
一趟選擇排序的操作為:通過(guò)n-1次關(guān)鍵字間的比較,從n-i個(gè)記錄中選出關(guān)鍵字最小的記錄,并和第i(0<=i<n)個(gè)記錄進(jìn)行交換。
一共需要進(jìn)行n-1趟選擇排序。
排序的數(shù)組為{6, 2, 8, 1, 4, 9, 3, 0, 5, 7};
選擇排序代碼
#include<iostream>
using namespace std;
swap( int array[], int j ) { //交換方法
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
void insertSort( int array[] ) {//選擇排序方法
for( int i = 0; i < 9; i++ ) {
for( int j = i+1; j > 0; j-- ) {
if( array[j] < array[j-1] ) {
swap( array, j );
}
else {
break;
}
}
}
}
int main() {
int array[] = {6, 2, 8, 1, 4, 9, 3, 0, 5, 7};
insertSort( array ); //調(diào)用選擇排序方法
for( int i = 0; i < 10; i++ ) {
cout << "array[" << i << "] = " << array[i] << endl;
}
}
選擇排序原理
如,對(duì)數(shù)組{6, 2, 8, 1, 4, 9}6個(gè)數(shù)字進(jìn)行排序

數(shù)組

第一趟循環(huán)
找出最小的數(shù)字array[3]=0,與array[0]=6進(jìn)行交換。確定了第一小的數(shù)字“1”

第二趟循環(huán)
此時(shí),最小的數(shù)字即array[1]本身。確定了第二小的數(shù)字“2

第三趟循環(huán)
此時(shí),找出最小的數(shù)字array[4]=4,與array[2]=8進(jìn)行交換。確定了第三小的數(shù)字“4”

第四趟循環(huán)
此時(shí),最小的數(shù)字即array[3]本身。確定了第四小的數(shù)字“6”

最后兩次循環(huán)
確定后最后兩位數(shù)字,第五小的數(shù)字“8”,以及最大的數(shù)字“9”
根據(jù)上圖可知,每一趟循環(huán)可以確定一個(gè)最小的數(shù)值
再看如下例子
| 比較次數(shù) | 6 | 2 | 8 | 1 | 4 | 9 | 3 | 0 | 5 | 7 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 8 | 1 | 4 | 9 | 3 | 6 | 5 | 7 |
| 2 | 0 | 1 | 8 | 2 | 4 | 9 | 3 | 6 | 5 | 7 |
| 3 | 0 | 1 | 2 | 8 | 4 | 9 | 3 | 6 | 5 | 7 |
| 4 | 0 | 1 | 2 | 3 | 4 | 9 | 8 | 6 | 5 | 7 |
| 5 | 0 | 1 | 2 | 3 | 4 | 9 | 8 | 6 | 5 | 7 |
| 6 | 0 | 1 | 2 | 3 | 4 | 5 | 8 | 6 | 9 | 7 |
| 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 7 |
| 8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 8 |
| 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- 在第一層循環(huán)中:
首先min=array[i],mini=i;- min和array[1]比較,min>array[1],則:min=array[1],mini=1;
- min和array[2]比較,min<array[2],則無(wú)需改變min與mini;
- min和array[3]比較,min>array[3],則:min=array[3],mini=3;
…… - min和array[9]比較,min>array[9],則無(wú)需改變min與mini;
- 第一層循環(huán)排序的結(jié)果為:
0, 2, 8, 1, 4, 9, 3, 6, 5, 7 - 同理,第二層排序的結(jié)果
0, 1, 8, 2, 4, 9, 3, 6, 5, 7 - 第三層排序結(jié)果:
0, 1, 2, 8, 4, 9, 3, 6, 5, 7
…… - 第八層排序結(jié)果:
0, 1, 2, 3, 4, 5, 6, 7, 9, 8 - 第九層排序結(jié)果:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
綜上可得:
升序排序中,外層循環(huán)每循環(huán)一次,都會(huì)將最小的數(shù)字與當(dāng)前位的數(shù)字進(jìn)行交換。
如果大家有什么問(wèn)題,可以在評(píng)論區(qū)中向我提問(wèn)。
今天更新的是選擇排序,后天我會(huì)更新“插入排序”,是三大排序中難度相對(duì)較大的。希望我的文章對(duì)大家有一定的幫助!