排序之插入排序:直接插入+希尔排序
一、插入排序
1、思想:原理类似抓扑克牌,在有序表中进行插入和查找,插入合适的位置时,之后的元素需要往后移动
2、时间复杂度:
最好:O(N),正序情况,只有比较时间,无移动时间
最坏:O(N2),逆序情况
平均:O(N2)
3、辅助空间:O(1)
4、稳定性:稳定
5、适用场合:适用于初始序列基本有序的情况,或者n小的时候,插入排序效率高
1 public static void insertSort(int[] a) { 2 int target,i,j; 3 for(j = 1;j < a.length; j++) {//当前待插入的元素下标 4 target = a[j];//待插入元素 5 while(j>0 && target < a[j-1]) { 6 a[j] = a[j-1];//向后移动 7 j--; 8 } 9 a[j] = target; 10 } 11 } 12
二、希尔排序
1、思想:先将整个待排记录序列分割成若干子序列分别进行直接插入排序,待整个记录基本有序时,再对整个记录进行一趟插入排序,步长最后必减少为1
2、时间复杂度:
最好:O(N1.3)
最坏:O(N2)
平均:根据步长不同
3、辅助空间:O(1)
4、稳定性:不稳定,插入排序本身稳定,但是由于有步长,所以不稳定
5、适用场合:关键字较小的记录就不是一步一步地向前挪动,而是跳跃式地往前移,从而使得进行最后一趟排序时,整个序列已经做到基本有序,只要作记录的少量比较和移动即可。因此希尔排序的效率要比直接插入排序高。
public static void shellSort(int[] a) {int i,j,r,temp;for(r = a.length/2;r >= 1;r = r/2) { //r为步长for(i = r;i < a.length;i++) {temp = a[i];j = i - r;while(j >= 0 && temp < a[j]) {a[j+r] = a[j];j-= r;}a[j+r] = temp;}}}
转载于:https://www.cnblogs.com/lizijiangmm/p/8645423.html
排序之插入排序:直接插入+希尔排序相关推荐
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序
第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
- 【排序】插入类排序—(折半)插入排序、希尔排序
前言 在数据结构和算法中,排序是非常重要的一环,并且排序也是渗透编程的方方面面. 你或许在写一个sql的order by按照某组进行排序,又或者你在刷一道题时候.常常遇到贪心+自定义排序求解的思路题, ...
- 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...
- 程序员内功修炼之学好算法和数据结构(一)排序基础、选择排序、插入排序、希尔排序...
一.排序基础(重要) 1.1 为什么要学习O(n^2)的排序算法? 编码简单,易于实现,是一些简单情景的首选. 在一些特殊情况下,简单的排序算法更有效. 简单的排序算法思想衍生出复杂的排序算法,在这个 ...
- 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)
排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...
- 排序算法分析:冒泡排序、选择排序、插入排序、希尔排序、快速排序
文章目录 一.冒泡排序 二.选择排序 三.插入排序 四.希尔排序 五.快速排序 一.冒泡排序 冒泡排序(Bubble Sort),它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大 ...
- java冒泡排序,选择排序,插入排序,希尔排序
没两天又忘了,再写一遍. import java.util.Arrays;/*** Description:* Created by quxiaozha on 2018-9-1, 43, 567.*/ ...
最新文章
- Android10.0 Binder通信原理(三)-ServiceManager篇
- mysql左连接丢失null值的问题
- tokyo cabinet java_Tokyo Cabinet的安装,含Java版(CentOS 5.4)
- MySQL配置(二)
- 7.3.2 非阻塞IO(non-blocking IO)
- postgresql参数化查询_一个能融会贯通PostgreSQL监控的人,大概率是高手
- k8s基础学习-存储卷
- ArcGIS 地表TIN面数据的符号化
- 各种音视频编解码学习详解
- docker+scrapy+scrapy_splash爬取大麦网
- Tautology(暴力,永真式)
- 通过PS调出胶片色调的古风照片
- 论文转换成引用的参考文献格式
- php 读取ipa图标,php解析ipa
- 随机产生a-z一个字母
- unity3d摄像机跟随物体移动的简单方法
- 【飞桨PaddlePaddle学习心得】被遗忘的8张图片(day2爬虫的王姝慧的问题)
- vs code 插件收集
- Vaa3D_批量将tiff文件转化成v3draw文件
- 我部门当前的岗位说明书
热门文章
- 【机器视觉】 fuzzy_measure_pairs算子
- 【机器视觉】 break算子
- 【Linux】一步一步学Linux——clear命令(241)
- 隐藏水滴屏的软件_突破屏下摄像头技术,vivo APEX 2020,开启全面屏手机黑科技!...
- 编译原理什么是移进规约冲突_编译原理复习题
- mybatis源码刨析总结
- Python入门--数据类型
- Linux C 的风格
- C++学习笔记-----二分法之寻找非减序列第一个大于某个值的数或最后一个小于某个值的数
- webservice 的datetime不能为null_用.net发布一个简单的webservice