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

数据结构-选择排序笔记

看里面的图解来理解

【数据结构】八大排序(超详解+附动图+源码)_数据结构排序-CSDN博客

一   基本思想:

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

二  代码实现

public class Main {
    // 主方法,程序的入口点
    public static void main(String[] args) {
        // 初始化一个整型数组,包含一些元素
        int arr[] = {221, 334, 300, 1};
        
        // 调用sort方法对数组进行排序
        sort(arr);

        // 遍历排序后的数组,并打印每个元素
        for(int i : arr){
            System.out.print(i + " ");
        }
    }

/*
//        插入排序可以理解成,将一个数组分成两个部分,一边是有序的一边是无序的。
//        最开始我们将数组第一个元素arr【0】看成有序数组,然后后面的都是无序数组
//        将后面无序数组的元素按一定算法找到要插入的位置并且插入
//         */

    // 定义一个静态方法sort,用于对整型数组进行排序
    static void sort(int arr[]){
        // 外层循环,从数组的第二个元素开始遍历到最后一个元素
        for(int i = 1 ; i < arr.length; i++){
            // 将当前元素的值赋给insertVal
            int insertVal = arr[i];
            // 初始化插入位置的索引为当前元素的前一个位置
            int insertIndex = i - 1;

            // 内层循环,用于将insertVal插入到已排序序列中的正确位置
            while(insertIndex >= 0 && insertVal < arr[insertIndex]){
                // 将当前位置的元素向后移动一位
                arr[insertIndex + 1] = arr[insertIndex];
                // 插入位置索引向前移动一位
                insertIndex--;
            }

            // 将insertVal插入到正确的位置
            arr[insertIndex + 1] = insertVal;
        }
    }
}

三  选择排序的特性总结

  1.  直接选择排序思考非常好理解,但是效率不是很好(不论数组是否有序都会执行原步骤)。实际中很少使用
  2.  时间复杂度:O(N^2)
  3.  空间复杂度:O(1)
  4.  稳定性:不稳定

http://www.kler.cn/a/373981.html

相关文章:

  • Vue前端开发:事件绑定方式
  • 攻防世界 MISC miao~详解
  • Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件
  • 萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?
  • 网络搜索引擎Shodan(2)
  • 【JVM 深入了解】JVM 到底包含什么?
  • PyTorch提供的多GPU数据并行nn.DataParallel
  • Docker Compose --- 管理多容器应用
  • centos7配置keepalive+lvs
  • X2JS: XML与JSON的完美转换工具
  • 基础IO -- 标准错误输出stderr
  • defer和async的区别
  • C#进阶1
  • vue3 ref和reactive踩坑
  • 实现Vue3/Nuxt3 预览excel文件
  • git revert‌和git reset,慎用git revert‌
  • 高阶数据结构--图(graph)
  • 微服务架构设计的初次尝试——基于以太坊智能合约 + NestJS 微服务的游戏社区与任务市场系统:架构设计
  • Android 刘海屏适配指南
  • Python酷库之旅-第三方库Pandas(182)
  • Mybatis-plus解决兼容oracle批量插入
  • centos7之LVS-NAT模式传统部署和docker部署
  • golang中的测试用例
  • 数据分析——大量数据进行分析
  • Spring Boot 3 + Spring Security + Knife4j 无法访问 Swagger 文档的问题及解决方案
  • 如何抓住鸿蒙生态崛起的机遇,解决开发挑战,创造更好的应用体验