当前位置: 首页 > news >正文

选择排序

目录

选择排序(第一种)(不稳定):

          代码实现:

        思路分析:

        选择排序(第二种)(不稳定):

        代码实现: 

        思路分析:


选择排序(第一种)(不稳定):

          代码实现:

 public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int mindex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if(arr[mindex] > arr[j]) {
                    mindex = j;
                }
            }
            //交换
            swap(arr,mindex,i);
        }
    }

    
    private static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

        思路分析:

        首先,每一次在 i 循环开始后,使用 mindex 记录 其 i 下标值的大小,之后,j 每次在 i 后一个元素开始循环,如果过程遇到 下标值 比 mindex下标值更小的,mindex 下标更新成小的下标,直到一轮 j 的循环结束,就能找到此过程与 i 下标相比最小的元素下标,再进行交换。 使得最小的元素放到了前面。

        

        选择排序(第二种)(不稳定):

        代码实现: 

 public static void selectSort2(int[] arr) {
        int left = 0;
        int right = arr.length - 1;
        while(left < right) {
            int mindex = left;
            int maxdex = left;
            for (int i = left + 1; i <= right ; i++) {
                if(arr[mindex] > arr[i]) {
                    mindex = i;
                }
                if(arr[maxdex] < arr[i]) {
                    maxdex = i;
                }
            }
            swap(arr,mindex,left);
            假设第一个值 是最大值
            if(maxdex == left) {
                maxdex = mindex;
            }
            swap(arr,maxdex,right);
            left++;
            right--;
        }
    }

    private static void swap(int[] arr,int i,int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

        思路分析:

                

         使用两个变量 mindex 和 maxdex 记录遍历过程中最小值的下标和最大值的下标。

        先给定 mindex 和 maxdex 的下标为 left ,定义一个变量 i ,从 left + 1 的位置开始,不断往后走更新mindex 和 maxdex ,找到包含 left 和 right 之间 的最大值 和最小值的下标,再将其left 与最小值下标mindex交换,right 与 最大值 maxdex 交换,然后left 加加,right减减,缩小范围,不断重复此过程,直至left 与 right相遇停止。

        值得注意的是,如果最大值下标 maxdex 是 left 的位置,那么在 left 和 mindex 的下标值交换后,left 下标的最大值跑到了 mindex 的位置去了,所有要把 maxdex 赋值成 mindex。

        

        选择排序效率不是很好。实际中很少使用。

http://www.dtcms.com/a/16996.html

相关文章:

  • 用nginx正向代理https网站
  • 面向对象程序设计-实验七
  • java下载多个JDK版本,debian12
  • Linux下MySQL的简单使用
  • 寻找两个有序数组的中位数
  • 一文了解zookeeper
  • Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
  • Sora平替|有言AI数字人视频生成工具“极简实操”
  • arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)
  • 【Map vs Set】:Java数据存储的“双子星”对决
  • RabbitMQ配置SSL证书
  • 在 Crates.io 上发布 Crate 的全流程指南
  • C++ 完美转发:泛型编程中的参数无损传递
  • 为AI聊天工具添加一个知识系统 之103 详细设计之44 自性三藏 之4 祖传代码 之2
  • Java 大视界 -- 量子计算时代 Java 大数据的潜在变革与应对策略(88)
  • 深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch
  • ‌CBA认证‌(业务架构师认证)简介---适用人群、考试内容与形式、含金量与职业前景,以及‌CBA、TOGAF认证对比表格
  • 什么是弧形光源
  • 【认证授权FAQ】HP Anyware LLS服务器常用命令
  • 【第2章:神经网络基础与实现——2.4 实战案例:使用TensorFlow或PyTorch实现简单的MLP模型】
  • 硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍
  • 库里存储的数据有大量回车时,该如何进行存取
  • 机柜机箱制冷风扇在使用过程中突然停止运转的原因
  • 【教程】比亚迪车机接入AI大模型语音助手
  • Oracle 12c 并发统计信息收集功能:技术解析与实践指南
  • HJS-DE1/2时间继电器 0.1-9.9S AC220V 导轨安装 JOSEF约瑟
  • 如何使用CSS Grid实现两列布局?
  • C++符号拓展带来的问题
  • 反向代理ml
  • 使用Python爬虫获取淘宝Custom API接口数据