IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 插入排序、希尔排序 -> 正文阅读

[数据结构与算法]插入排序、希尔排序

作者:%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F

目录

插入排序

希尔排序


插入排序

插入排序(InsertionSort),一般也被称为直接插入排序。(稳定排序)

对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表

。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

/**
 * @packageName: com.sofwin.controller
 * @author: wentao
 * @date: 2022/10/31 11:06
 * @version: 1.0
 * @description: 插入算法
 */
public class InsertSort {
 ? ?public static void main(String[]args){
 ? ? ? ?int[] a = {9,3,7,2,5,8,1,4};
 ? ? ? ?insert(a);
 ? ? ? ?System.out.println(Arrays.toString(a));
 ?  }
?
 ? ?public static void insert(int[] arr) {
?
?
 ? ? ? ?//i代表插入元素的索引
 ? ? ? ?for (int i = 1; i < arr.length; i++) {
 ? ? ? ? ? ?//代表待插入的值
 ? ? ? ? ? ?int t = arr[i];
 ? ? ? ? ? ?int j; //已排序区的索引
 ? ? ? ? ? ?for (j = i-1;j >= 0;j--) {
 ? ? ? ? ? ? ? ?//如果前面大 就插入即可
 ? ? ? ? ? ? ? ?if (arr[j] > t) {
 ? ? ? ? ? ? ? ? ? arr[j+1] =arr[j];
 ? ? ? ? ? ? ?  }else {
 ? ? ? ? ? ? ? ? ? ?//如果t大于了 就直接退出即可
 ? ? ? ? ? ? ? ? ? ?break;
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ? ? ? ?//退出完毕后 我们将j的前一个插入t即可
 ? ? ? ? ? ?arr[j+1] = t;
 ? ? ? ? ? ?System.out.println("结果:"+Arrays.toString(arr));
 ? ? ?  }
 ?  }
}
?

优化方式:

  1. 待插入元素进行比较时,遇到比自己小的元素,就代表找到插入位置,无序进行后序比较

  2. 插入的时候直接移动元素,无需交换元素

与选择排序比较:

  1. 二者平均时间复杂度是O(n^2)

  2. 大部分情况下,插入都略优于选择

  3. 有序集合插入的时间复杂度为O(n)

  4. 插入排序属于稳定排序算法,而选择属于不稳定排序算法

希尔排序

插入排序如果大的数在前面,需要移动很多次 ,希尔排序是为了解决插入排序的这个缺点

希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。
?
希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。
?
它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。(有各种不同的间隔的取法 )
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:49:39  更:2022-11-05 00:52:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:15:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码