程序员必须掌握的8大排序算法(一):直接插入排序
2017-08-27 13:17
302 查看
分类:
1)插入排序(直接插入排序、希尔排序)
2)交换排序(冒泡排序、快速排序)
3)选择排序(直接选择排序、堆排序)
4)归并排序
5)分配排序(基数排序)
![](http://img.blog.csdn.net/20170827131548144)
在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
![](http://img.blog.csdn.net/20170827131635680)
(二)代码实现(Java)
运行结果:
Original array: [57, 68, 59, 52]
Sorted array: [52, 57, 59, 68]
程序分析:
(1) i = 1, temp = a[1] = 68, j = 1, array[0] = 57, array[0] > temp不成立,不需要调整
(2)i = 2,temp = a[2] = 59,
① j = 2,array[1] = 68 > temp,执行循环array[2] = array[1] = 68,j自减。
② j = 1, array[0] = 57 > temp不成立,循环结束。
③ 最后执行array[1] = temp = 59,此时arr = {57,59,68,52}
(3)i = 3,temp = a[3] = 52
① j = 3, array[2] = 68 > temp,执行循环array[3] = array[2] = 68,j自减
② j = 2,array[1] = 59 > temp,执行循环array[2] = array[1] = 59,j自减
③ j = 1,array[0] = 57 > temo,执行循环array[1] = array[0] = 57,j自减后变为0,循环结束
④ 最后执行array[0] = temp = 52,此时array = {52, 57, 59, 68}
1)插入排序(直接插入排序、希尔排序)
2)交换排序(冒泡排序、快速排序)
3)选择排序(直接选择排序、堆排序)
4)归并排序
5)分配排序(基数排序)
一、直接插入排序
(一)基本思想在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
(二)代码实现(Java)
import java.util.Arrays; public class Sort { public static void insertSort(int[] array) { int i, j, temp; for (i = 1; i < array.length; i++) { temp = array[i]; j = i; // 将大于temp的值整体后移一个单位 while(j > 0 && array[j-1] > temp) { array[j] = array[j-1]; j--; } array[j]=temp; } } public static void main(String[] args) { int[] arr = {57, 68, 59, 52}; System.out.println("Original array: " + Arrays.toString(arr)); insertSort(arr); System.out.println("Sorted array: " + Arrays.toString(arr)); } }
运行结果:
Original array: [57, 68, 59, 52]
Sorted array: [52, 57, 59, 68]
程序分析:
(1) i = 1, temp = a[1] = 68, j = 1, array[0] = 57, array[0] > temp不成立,不需要调整
(2)i = 2,temp = a[2] = 59,
① j = 2,array[1] = 68 > temp,执行循环array[2] = array[1] = 68,j自减。
② j = 1, array[0] = 57 > temp不成立,循环结束。
③ 最后执行array[1] = temp = 59,此时arr = {57,59,68,52}
(3)i = 3,temp = a[3] = 52
① j = 3, array[2] = 68 > temp,执行循环array[3] = array[2] = 68,j自减
② j = 2,array[1] = 59 > temp,执行循环array[2] = array[1] = 59,j自减
③ j = 1,array[0] = 57 > temo,执行循环array[1] = array[0] = 57,j自减后变为0,循环结束
④ 最后执行array[0] = temp = 52,此时array = {52, 57, 59, 68}
相关文章推荐
- 01_程序员必须掌握的8大排序算法_直接插入排序
- Java程序员必须掌握的排序算法Java实现整合一 :插入排序
- 必须会的排序算法---(1)直接插入排序
- 程序员必须掌握的8大排序算法(排序舞蹈)
- Java程序员必须掌握的排序算法Java实现整合二 :选择排序
- 07_程序员必须掌握的8大排序算法_并归排序
- 程序员必须掌握的8种排序算法(八):基数排序
- 909422229__1.直接插入排序__程序员必须知道的8大排序和3大查找
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- Java程序员必须掌握的8大排序算法
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 排序算法之----直接插入排序
- 排序算法-插入排序_直接插入排序
- Java常用排序算法/程序员必须掌握的8大排序算法
- 排序算法1_直接插入排序
- 排序算法---直接插入排序
- 排序算法之直接插入排序-Java-version
- Java常用排序算法/程序员必须掌握的8大排序算法
- Java常用排序算法/程序员必须掌握的8大排序算法
- 排序算法总结之直接插入排序