常用算法Java实现之直接插入排序
2016-08-25 19:05
453 查看
直接插入排序是将未排序的数据插入至已排好序序列的合适位置。
具体流程如下:
1、首先比较数组的前两个数据,并排序;
2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
......
4、直至把最后一个元素放入适当的位置。
假如有初始数据:25 11 45 26 12 78。
1、首先比较25和11的大小,11小,位置互换,第一轮排序后,顺序为:[11, 25, 45, 26, 12, 78]。
2、对于第三个数据45,其大于11、25,所以位置不变,顺序依旧为:[11, 25, 45, 26, 12, 78]。
3、对于第四个数据26,其大于11、25,小于45,所以将其插入25和45之间,顺序为:[11, 25, 26, 45, 12, 78]。
.......
4、最终顺序为:[11, 12, 25, 26, 45, 78]。
直接插入排序是稳定的。直接插入排序的平均时间复杂度为O(n2)。
Java 代码实现如下:(https://github.com/xbk417/algorithm)
具体流程如下:
1、首先比较数组的前两个数据,并排序;
2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
......
4、直至把最后一个元素放入适当的位置。
假如有初始数据:25 11 45 26 12 78。
1、首先比较25和11的大小,11小,位置互换,第一轮排序后,顺序为:[11, 25, 45, 26, 12, 78]。
2、对于第三个数据45,其大于11、25,所以位置不变,顺序依旧为:[11, 25, 45, 26, 12, 78]。
3、对于第四个数据26,其大于11、25,小于45,所以将其插入25和45之间,顺序为:[11, 25, 26, 45, 12, 78]。
.......
4、最终顺序为:[11, 12, 25, 26, 45, 78]。
直接插入排序是稳定的。直接插入排序的平均时间复杂度为O(n2)。
Java 代码实现如下:(https://github.com/xbk417/algorithm)
public void sort(int[] arr) { int tmp; for(int i = 1; i < arr.length; i++) { // 待插入数据 tmp = arr[i]; int j; for(j = i - 1; j >= 0; j--) { // 判断是否大于tmp,大于则后移一位 if(arr[j] > tmp) { arr[j+1] = arr[j]; }else{ break; } } arr[j+1] = tmp; System.out.println(i + ":" + Arrays.toString(arr)); } }
相关文章推荐
- 用JAVA实现排序算法之二:直接插入排序
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- java实现 排序算法之直接插入排序
- Java常用排序算法之直接插入排序
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- java实现排序算法之2-路插入排序,直接插入排序,折半插入排序
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- java实现排序算法之直接插入排序
- 插入排序算法---java 实现
- 直接插入排序java实现
- 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现 .
- Java实现直接插入排序
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
- Java程序实现冒泡排序、直接排序、插入排序方法
- Java实现直接插入排序
- 每日一算法之直接插入排序的原理及实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现