选择排序知识点

选择排序基本原理

8 7 1 5 4 2 6 3 9

新建中间商

依次比较

找出极值(最大或最小)

放入目标位置

比较n轮

代码实现

cs 复制代码
int[] arr = new int[] { 8, 7, 1, 5, 2, 6, 3, 9, };
//第一步,声明一个中间商来记录索引
//每一轮开始,默认第一个都是极值
//int index = 0;
//第二步
//依次比较
//for (int n = 0; n < arr.Length; n++)
//{
//    //第三步
//    //找出极值(最大值)
//    if (arr[index] < arr[n])
//    {
//        index = n;
//    }
//}

//第四步,放入目标位置
//Length - 1 - 轮数
//if (index != arr.Length - 1 - 轮数)
//{
//    int temp = arr[index];
//    arr[index] = arr[arr.Length - 1 - 轮数];
//    arr[arr.Length - 1 - 轮数] = temp;
//}

//第五步,比较m轮
for (int m = 0; m < arr.Length; m++)
{
    //第一步,声明一个中间商来记录索引
    //每一轮开始,默认第一个都是极值
    int index = 0;
    //第二步
    //依次比较
    //-m的目的,是排除上一轮已经放好位置的数
    for (int n = 0; n < arr.Length - m; n++)
    {
        //第三步
        //找出极值(最大值)
        if (arr[index] < arr[n])
        {
            index = n;
        }
    }

    //第四步,放入目标位置
    //Length - 1 - 轮数
    //如果当前极值所在位置就是目标位置,那就没有必要交换了
    if (index != arr.Length - 1 - m)
    {
        int temp = arr[index];
        arr[index] = arr[arr.Length - 1 - m];
        arr[arr.Length - 1 - m] = temp;
    }
}

for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}

小结:

基本概念

新建中间商

依次比较

找出极值

放入目标位置

比较n轮

套路写法

两层循环

外层轮数

内层寻找

初始索引

记录极值

内存循环外交换

相关推荐
代码改善世界8 小时前
【数据结构与算法】栈和队列题解
数据结构
ShineWinsu8 小时前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
pp起床8 小时前
动态规划 | part05
算法·动态规划
GuangHeAI_ATing8 小时前
国密算法SSD怎么选?这3款国产固态硬盘安全又高速
算法
雨泪丶9 小时前
代码随想录算法训练营-Day34
算法
Yzzz-F9 小时前
牛客寒假算法训练营2
算法
甄心爱学习9 小时前
【python】获取所有长度为 k 的二进制字符串
python·算法
iAkuya10 小时前
(leetcode)力扣100 76数据流的中位数(堆)
算法·leetcode·职场和发展
键盘鼓手苏苏10 小时前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
董董灿是个攻城狮10 小时前
AI 视觉连载5:传统 CV 之均值滤波
算法