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;
} 

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

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