经典的8个内部排序算法

2023-11-07

1.直插排序

思想:

 每一趟,对于待排序元素a[i],该元素前面的子序列已有序;在有序序列中从后往前查找其插入位置,一边比较一边移动。直至找到插入位置,插入该元素;一共n-1趟。
_20190222172713

举例:

 待排序序列: 5 8 4 12 9

 第一趟: 5 8 4 12 9

 第二趟: 4 5 8 12 9

 第三趟: 4 5 8 12 9

 第四趟: 4 5 8 9 12

代码:

    public static void insertSort(int a[]){
   
        int n=a.length;
        int toSort;//存储待排序元素
        for (int i=1;i<n;i++){
   //n-1趟
            if(a[i]<a[i-1]){
   //若>=,无需移动插入
                toSort=a[i];
                int j;
                for (j=i-1; j>=0;j--) {
   //从后往前查找插入位置
                    if (toSort < a[j])//边比较
                        a[j + 1] = a[j];//边移动
                    else break;
                }
                a[j+1]=toSort;//插入到插入位置
            }
        }
    }

说明:

  • 每一趟a[i]不一定到达最终位置;

2.希尔排序

思想:

 先将待排序表分割成若干个形如a[i,i+d,i+2d,…,i+kd]的子表 ,分别进行直插排序;当整个表呈现“基本有序”时,再对全体进行一次直插排序。
 存在一个增量序列di ,d1=n/2 , di+1=di/2 ,并且最后一个增量1 .

举例:

 待排序序列 di={5,3,1}:50 26 38 80 70 90 8 30 40 20

 第一趟(增量5): 50 8 30 40 20 90 26 38 80 70

 第二趟(增量3): 26 8 30 40 20 80 50 38 90 70

 第三趟(增量1): 8 20 26 30 38 40 50 70 80 90

代码:

    public static void shellSort(int a[]){
   
        int n=a.length;
        int toSort;//存储待排序元素
        for (int d=n/2 ;d>=1 ;d=d/2)//增量变化
            for (int i=d;i<n ;i++){
   
                if(a[i]<a[i-d]){
   
                    toSort=a[i];
                    int j;
                    for (j=i-d ;j>=0 ; j-=d){
   
                        if(toSort<a[j]) a[j+d]=a[j];
                        else break;
                    }
                    a[j+d]=toSort;
                }
            }
    }

说明:

  • 希尔排序的代码只需将1换成d即可;

3.冒泡排序

思想:

 每一趟,从后往前,两两比较,逆则交换;每趟结果让最小元素到达最终位置,若该趟没有发生交换,说明表已经有序。最多n-1趟。

举例:

 待排序序列:5 8 4 12 9

 第一趟: 4 5 8 9 12

 第二趟: 4 5 8 9 12

代码:

public static void bubbleSort(int a[]){
   
        boolean flag;//标志某趟是否交换过
        int n=a.length;
        for (int i
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典的8个内部排序算法 的相关文章

  • MSYS2 如何添加国内源

    用MSYS2 pacman S 安装包的速度让你怀疑人生 所以需要将源换成国内源 步骤 lt 1 gt 打开MSYS2软件内的 etc pacman d 其中有3个文件 mirrorlist mingw32 mirrorlist mingw

随机推荐

  • Nacos未授权访问漏洞(CVE-2021-29441)

    目录 漏洞描述 影响范围 环境搭建 漏洞复现 声明 本文仅供学习参考 其中涉及的一切资源均来源于网络 请勿用于任何非法行为 否则您将自行承担相应后果 本人不承担任何法律及连带责任 加粗样式 漏洞描述 Nacos 是阿里巴巴推出来的一个新开源
  • 百度Apollo(二):障碍物感知模块

    Apollo感知模块具有识别障碍物和交通灯的能力 其中 Apollo解决的障碍物感知问题 1 高精地图ROI过滤器 HDMap ROI Filter 2 基于卷积神经网络分割 CNN Segmentation 3 MinBox 障碍物边框构
  • jenkins构建前、构建、构建后操作

    因为使用docker部署的jenkins存在目录映射问题 所以直接部署jenkins 部署参考 构建前操作 思路 使用ssh到目标服务器下发命令 查询启动的node服务 分析不同的服务器启动的服务 备份服务对应代码 构建 思路 jenkin
  • linux 创建 svn 库

    cd data svn mkdir p itvalue chown R windmaker windmaker itvalue svnadmin create data svn itvalue cd itvalue cd conf vim
  • freeimage ubuntu安装

    sudo apt get install libfreeimage dev sudo apt get install libfreeimage 编译安装地址 https github com Kanma FreeImage This dis
  • es6 求两个数组的差集

    let arr 1 2 3 4 5 let arr01 1 2 3 4 5 6 7 8 9 let arr02 arr01 filter x gt arr every y gt y x console log arr02
  • 以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(三)

    在以太坊Dapp终极教程 如何构建一个完整的全栈去中心化应用 一 中 我们已经完成了一切所需的设置 在以太坊Dapp终极教程 如何构建一个完整的全栈去中心化应用 二 中 让我们通过列出将在选举中运行的候选人来继续构建智能合约并完成客户端程序
  • 第四章文件管理

    0 初识文件管理 一个文件有哪些属性 文件名 由创建文件的用户决定文件名 主要是为了方便用户找到文件 同一目录下不允许有重名文件 标识符 一个系统内的各文件标识符唯一 对用户来说毫无可读性 因此标识符只是操作系统用于区分各个文件的一种内部名
  • WLS2 下解决nvidia-smi不可用方法

    WLS2系统 Ubuntu22 04 windows win11 wls2更新内核后 nvcc V 可用 但是 nvidia smi报错 NVIDIA SMI has failed because it couldn t communica
  • 安装开发软件的步骤以及后期开发会遇到的一系列问题

    这是我自己进行项目开发过程中遇到的一些问题 我将他们记录了下来 一 合理的安装开发软件的过程 1 安装jdk 1 1版本问题 不要安装最新的jdk 很容易出现bug 可以安装第三个版本左右的jdk 1 2配置环境变量 网上搜 2 安装Tom
  • 区块链学习笔记(三)——第一章 密码学及加密货币概念

    加密数字货币与法定货币不同在于 其安全规则需要完全通过技术手段实现 而非依赖中央机构 1 1 哈希函数 哈希函数三个特性 1 任意大小字符串均可作为输入 2 产生固定大小输出 3 能进行有效计算 即对应n位字符串 其哈希值计算复杂度为 O
  • linux 下使用 sar -n 命令查看Kbps、bps的带宽速率

    一 关于网络带宽知识 1 1 速率单位 bps 速度单位 bit即比特 通常用b 小写 表示 指一位二进制位 1 Milionbit 1000Kilobit 1000000bit 即 1Mbps 1000 000bps 常见换算单位 Mbp
  • helm 安装

    官方安装 https helm sh docs intro install 1 一键安装 curl https raw githubusercontent com helm helm main scripts get helm 3 bash
  • 计算机毕业设计Node.js+Vue电影票网上订票系统(程序+源码+LW+部署)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 欢迎交流 项目运行 环境配置 Node js Vscode Mysql5 7 HBuilderX Navicat11 Vue Express 项目技术 Express框架 No
  • Unity 动态加载Prefab

    Unity动态记载Prefab 第一种方法 从Resources文件夹读取Prefab Assets Resources是Unity中的一个特殊文件夹 放在这个文件夹里的资源包括Prefab可以被代码动态加载 GameObject Pref
  • 软件测试_笔记(完整版)

    软件测试 概述 程序 文档 数据 软件 狭义的软件测试定义 为发现软件缺陷而执行程序或系统的过程 广义的软件测试定义 人工或自动地运行或测定某系统的过程 目的在于检验它是否满足规定的需求或弄清预期结果和实际结果间的差别 为什么要做软件测试
  • LTspice入门使用教程(导入元器件&电压电流波形&幅频特性曲线)

    LTspice使用教程 本文针对LTspice的基本操作进行简单讲解 包括 导入自定义参数的元器件模型 仿真查看电压 电流波形图 输出幅频特性曲线 导入自定义参数的模型 打开LTspice 新建原理图之后 选择工具栏里的component
  • html实现点击复制内容功能

    需要实现点击复制功能需要先下载个插件 vue中可以通过 npm install clipboard save dev 来安装该插件 也可以通过使用线上cdn 复制scirpt标签引入到页面即可 html td class t left 用户
  • MatConvNet中mnist源码解析

    本文的代码来自MatConvNet 下面是自己对代码的注释 cnn mnist init m function net cnn mnist init varargin CNN MNIST LENET Initialize a CNN sim
  • 经典的8个内部排序算法

    1 直插排序 思想 每一趟 对于待排序元素a i 该元素前面的子序列已有序 在有序序列中从后往前查找其插入位置 一边比较一边移动 直至找到插入位置 插入该元素 一共n 1趟 举例 待排序序列 5 8 4 12 9 第一趟 5 8 4 12