必须掌握的八种排序(1-2)--插入排序,希尔排序
来源:互联网 发布:计算机专业学什么 知乎 编辑:程序博客网 时间:2024/06/05 22:54
很多人算法和数据结构不好,归根结底就是基础不扎实,算法和数据结构不好的话,达到的高度肯定不会很高,最近重新加强了一下自己的算法基础,决定从最基础的内容开始,如有不足的地方,欢迎指正。
排序方法可以分为五种∶插入排序、选择排序、交换排序、分配排序和归并排序。
在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。
首先来看一下八种排序之间的关系图
1、 直接插入排序
(1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排
好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
也是排好顺序的。如此反复循环,直到全部排好顺序。
(2)理解图:
已知待序的一组记录的初始排列为:21, 25, 49, 25*, 16, 08
开始排序
(3)代码实现
//插入排序算法 public static void insertSort(int [] a){ //插入排序算法 //假设当前待比较项前面的数都是已经排好序的,则拿当前待比较项与前面最后一个数比较 //如果比前面的数小,则把前面的数后移,索引减一 直到它比前面的数大则退出当前循环 for(int i=1;i<a.length;i++){//假设第一个元素是排好序的,从第二个元素循环整个数组 //记录当前元素的索引 int j=i; int temp=a[j]; //循环将当前的值与前面的值进行比较,如果当前的值比前面的元素小,则将前面的值向后移(复制),再将索引向前移动,直到移动到数组的开头索引0位置 while(j>0&&temp<a[j-1]){ a[j]=a[j-1]; j--; } //将当前的值放到合适的位置 a[j]=temp; } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
直接插入排序最大的优点是简单,在记录数较少时,是比较好的办法。
2、希尔排序(最小增量排序)
(1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
(2)理解图
(3)代码实现
public void shellSort(int[] a) { int temp = 0; double d1 = a.length; while (true) { d1 = Math.ceil(d1 / 2); int d = (int) d1; for (int x = 0; x < d; x++) { for (int i = x + d; i < a.length; i += d) { int j = i - d; temp = a[i]; for (; j >= 0 && temp < a[j]; j -= d) { a[j + d] = a[j]; } a[j + d] = temp; } } if (d == 1) { break; } } for (int i = 0; i < a.length; i++) System.out.print(a[i] + "\t"); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
阅读全文
0 0
- 必须掌握的八种排序(1-2)--插入排序,希尔排序
- 必须掌握的八种排序(1-2)--插入排序,希尔排序
- 必须掌握的八种排序(1-2)--插入排序,希尔排序
- 必须掌握的八种排序(3-4)--简单选择排序,堆排序
- 必须掌握的八种排序(5-6)--冒泡排序,快速排序
- 必须掌握的八种排序(7-8)--归并排序,基数排序
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 插入排序的改进2:希尔排序
- 希尔排序(插入排序的改良)
- 程序员必须掌握的8大排序算法(二):希尔排序
- 必须掌握的排序
- 排序 - 插入排序 [2 - 希尔排序]
- 排序-插入排序(希尔排序)
- 排序4:插入排序(希尔排序)
- 插入排序--希尔排序
- 插入排序 希尔排序
- 插入排序--希尔排序
- 插入排序,希尔排序
- spark-streaming 编程(四)自定义输出foreachRDD
- keras tensorboard的使用, 设置GPU使用的内存, 强制只使用cpu
- 微信小程序周报(第十二期)-极乐小程序商店出品
- 26.odoo入门——工作杂记之many2one
- 直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置
- 必须掌握的八种排序(1-2)--插入排序,希尔排序
- C++项目中的extern "C" {}
- 语义网简介(二)—XML与XML Schema
- 怎样才算是做好了站内SEO?老专家这么说
- 使用Python批量重命名文件夹中的文件
- wpf中无边框窗体的问题
- ZOJ 3607 Lazier Salesgirl(贪心)
- Qt QTcpSocket 对连接服务器中断的不同情况进行判定
- lightOJ 1220 Mysterious Bacteria