当前位置: 首页 > 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。

        

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

相关文章:

  • 用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模型】
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 陶石不语,玉见文明:临平玉架山考古博物馆明日开馆
  • 梅花奖在上海|舞剧《朱鹮》,剧里剧外都是生命的赞歌
  • 舱位已排到月底,跨境电商忙补货!美线订单大增面临爆舱,6月运价或翻倍
  • 江西3人拟提名为县(市、区)长候选人
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期