选择排序知识点

选择排序基本原理

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轮

套路写法

两层循环

外层轮数

内层寻找

初始索引

记录极值

内存循环外交换

相关推荐
焦耳加热2 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn2 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6063 小时前
常用排序算法核心知识点梳理
算法·排序
蒋星熠5 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小欣加油5 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream5 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL6 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法
空白到白6 小时前
机器学习-聚类
人工智能·算法·机器学习·聚类
索迪迈科技6 小时前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
zzzsde7 小时前
【数据结构】队列
数据结构·算法