【數(shù)據(jù)結(jié)構(gòu)】選擇排序

默認(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

{\text{選擇排序表格}}

  1. 在第一層循環(huán)中:
    首先min=array[i],mini=i;
    1. min和array[1]比較,min>array[1],則:min=array[1],mini=1;
    2. min和array[2]比較,min<array[2],則無(wú)需改變min與mini;
    3. min和array[3]比較,min>array[3],則:min=array[3],mini=3;
      ……
    4. min和array[9]比較,min>array[9],則無(wú)需改變min與mini;
  2. 第一層循環(huán)排序的結(jié)果為:
    0, 2, 8, 1, 4, 9, 3, 6, 5, 7
  3. 同理,第二層排序的結(jié)果
    0, 1, 8, 2, 4, 9, 3, 6, 5, 7
  4. 第三層排序結(jié)果:
    0, 1, 2, 8, 4, 9, 3, 6, 5, 7
    ……
  5. 第八層排序結(jié)果:
    0, 1, 2, 3, 4, 5, 6, 7, 9, 8
  6. 第九層排序結(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ì)大家有一定的幫助!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容