C++实现基本排序算法3:直接选择排序

选择排序的基本思想是: 在每一趟排序中,在待排序自表中选出关键字最小或者最大的元素放在其最终的位置。本文主要介绍的是直接选择排序。

1. 直接选择排序的基本原理

参考文献:

  1. 经典排序算法 - 选择排序Selection sort
2. 代码
#include <iostream>
#include <vector>

void Swap(std::vector<int>& unorder_array, int a, int b) {  // 交换数据,不使用中间变量
    unorder_array[a] = unorder_array[a] + unorder_array[b]; // 注意这里是unorder_array[b]而不是b
    unorder_array[b] = unorder_array[a] - unorder_array[b];
    unorder_array[a] = unorder_array[a] - unorder_array[b];

}
// 直接选择排序, 每次选择最小的
void SelectSort(std::vector<int>& unorder_array) {
    for (int i = 0; i < unorder_array.size() - 1; ++i) {   // 因为我们只有将前面n-1个排序好就可以了,所以循环的次数是i < n - 1
        int min = i;    // 当前最小值
        for (int j = i + 1; j < unorder_array.size(); ++j) {
            if (unorder_array[j] < unorder_array[min]) {    // 如果后面的元素小于当前最小的min
                min = j;
            }
        }
        if (min != i) { // 表示这一轮下来我们min已经发生了改变了
            Swap(unorder_array, i, min);
        }
    }
}

int main()
{
    std::vector<int> unorder_array;
    int data;
    std::cin >> data;
    unorder_array.push_back(data);
    while (std::cin.get() != '\n') {
        std::cin >> data;
        unorder_array.push_back(data);
    }
    std::cout << "orgin seq is: ";
    for (auto it = unorder_array.begin(); it != unorder_array.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << "\n";
    SelectSort(unorder_array);
    std::cout << "select sort is: ";
    //BubbleSort(unorder_array);
    //std::cout << "bubble sort is: ";
    for (int i = 0; i < unorder_array.size(); ++i) {
        std::cout << unorder_array[i] << " ";
    }
    return 0;
}

在这里插入图片描述

下面介绍归并排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值