C++排序算法之選擇排序

  1. 選擇排序基本思路
    選擇排序的基本思路就是,首先選出其中最小的值,放在第一個位置,然後選出第二小的數值,放在第二個位置,以此類推,直到所有數值都以從小到大的順序排完。

  2. 實現思路
    首先,我們需要確定第n小的數所在位置,然後將其與第n個數進行對換。下面,我們使用2,3,1,4來進行選擇排序說明,使用min_num來記錄最小數所在位置。
    第一輪交換:
    2,3,1,4(min_num = 1)
    2,3,1,4 (2<3,min_num = 1)
    2,3,1,4(2>1,min_num = 3)
    2,3,1,4(1<4,min_num = 3)
    第一輪排序結果將2與1交換,最終得到
    1,3,2,4

    第二輪交換:
    1,3,2,4(min_num = 2)
    1,3,2,4(3>2,min_num = 3)
    1,3,2,4(2<4,min_num = 3)
    1,2,3,4(將3與2進行交換)
    第二輪結果
    1,2,3,4

    第三輪交換(此處已經得到最終排序,這裏是爲了演示過程)
    1,2,3,4(min_num= 3)
    1,2,3,4(3<4,min_num = 3)
    最終結果爲:
    1,2,3,4。排序完成。

    一般情況下,當有N個無序數組數字集合時,需要進行N-1次選擇排序,第n輪選取第n小的數字,並將其放在第n的位置上面。下面是具體實現代碼:

#include<iostream>
#include<stdio.h>
using namespace std;

#define N  4

void choose_sort(int a[],int b);
//選擇排序
void choose_sort(int a[], int b){
    //N-1輪排序
    for ( int i = 0;  i < b-1;  i++)
    {
        int min_num = 1;
        for (int j = i+1;j < b; j++)
        {
            if (a[j] < a[min_num]){
                min_num = j;
            }
        }
        //將第i小的數字,放在第i個位置,如果剛好,就不交換
        if (i != min_num)
        {
            int temp = a[i];
            a[i] = a[min_num];
            a[min_num] = temp;
        }

    }
}

int main(){
    int num[N] = {2,3,1,4};
    choose_sort(num, N);
    for (int i = 0; i < N; i++)
        cout << num[i] << " ";
        system("pause");
        return 0;
} 

至此,簡單排序大功告成,看最後結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章