选择排序知识点

选择排序基本原理

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轮

套路写法

两层循环

外层轮数

内层寻找

初始索引

记录极值

内存循环外交换

相关推荐
yuanManGan1 小时前
数据结构漫游记:静态链表的实现(CPP)
数据结构·链表
火星机器人life2 小时前
基于ceres优化的3d激光雷达开源算法
算法·3d
虽千万人 吾往矣2 小时前
golang LeetCode 热题 100(动态规划)-更新中
算法·leetcode·动态规划
arnold663 小时前
华为OD E卷(100分)34-转盘寿司
算法·华为od
ZZTC3 小时前
Floyd算法及其扩展应用
算法
lshzdq4 小时前
【机器人】机械臂轨迹和转矩控制对比
人工智能·算法·机器人
2401_858286114 小时前
115.【C语言】数据结构之排序(希尔排序)
c语言·开发语言·数据结构·算法·排序算法
猫猫的小茶馆4 小时前
【数据结构】数据结构整体大纲
linux·数据结构·算法·ubuntu·嵌入式软件
u0107735144 小时前
【字符串】-Lc5-最长回文子串(中心扩展法)
java·算法
帅逼码农5 小时前
K-均值聚类算法
算法·均值算法·聚类