C++排序算法之选择排序

来源:互联网 发布:足球基本技术动作知乎 编辑:程序博客网 时间:2024/04/29 13:13
  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  4void 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;} 

至此,简单排序大功告成,看最后结果:
这里写图片描述

0 0