选择排序基本思路
选择排序的基本思路就是,首先选出其中最小的值,放在第一个位置,然后选出第二小的数值,放在第二个位置,以此类推,直到所有数值都以从小到大的顺序排完。实现思路
首先,我们需要确定第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;
}
至此,简单排序大功告成,看最后结果: