选择排序-CPP实现(简单易懂)

选择排序

时间复杂度: O(n^2)

 

思路

[8, 2, 5, 9 ,7]为例

第一次选择: 找到数组中最小的数字 2 ,然后和第一个数字交换位置。(如果第一个数字就是最小值,那么自己和自己交换位置,也可以不做处理,就是一个 if 的事情)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NUDOqaHF-1665499808788)(C:\Users\Zhang\AppData\Roaming\Typora\typora-user-images\image-20221011221701652.png)]

 

第二次选择: 由于数组第一个位置已经是有序的,所以只需要查找剩余位置,找到其中最小的数字5,然后和数组第二个位置的元素交换。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeXA7dCe-1665499808789)(C:\Users\Zhang\AppData\Roaming\Typora\typora-user-images\image-20221011221734063.png)]

 

第三次选择: 找到最小值 7 ,和第三个位置的元素交换位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4WDpPIeL-1665499808790)(C:\Users\Zhang\AppData\Roaming\Typora\typora-user-images\image-20221011221837905.png)]

 

第四次选择: 找到最小值8,和第四个位置的元素交换位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkedSp95-1665499808790)(C:\Users\Zhang\AppData\Roaming\Typora\typora-user-images\image-20221011222110103.png)]

最后仅剩一个元素,即为有序

 

代码

#include <iostream>
using namespace std;
void selectionSort(int* arr, int sz)
{
    for (int i = 0; i < sz - 1; i++)
    {
		int min = i;
        for (int j = i + 1; j < sz; j++)
        {
            if (arr[j] < arr[min])
                min = j;
        }
        swap(arr[i], arr[min]);
    }
}

int main()
{
	int arr[] = {8, 2, 5, 9, 7};
    int sz = sizeof(arr) / sizeof(arr[0]);
    selectionSort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
		cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值