選擇排序基本思路
選擇排序的基本思路就是,首先選出其中最小的值,放在第一個位置,然後選出第二小的數值,放在第二個位置,以此類推,直到所有數值都以從小到大的順序排完。實現思路
首先,我們需要確定第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;
}
至此,簡單排序大功告成,看最後結果: