Java排序算法(六):直接插入排序 .
2014-09-28 12:38
204 查看
Java排序算法(六):直接插入排序
直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。
直接插入的时间效率并不高,如果在最坏的情况下,所有元素的比较次数总和为(0+1+...+n-1)=O(n^2)。其他情况下也要考虑移动元素的次数,故时间复杂度为O(n^2)
直接插入空间效率很好,只需要1个缓存数据单元,也就是说空间复杂度为O(1).
直接插入排序是稳定的。
直接插入排序在数据已有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据,其效率就与冒泡排序法和选择排序法一样差了。
算法描述
对一个有n个元素的数据序列,排序需要进行n-1趟插入操作:
第1趟插入,将第2个元素插入前面的有序子序列--此时前面只有一个元素,当然是有序的。
第2趟插入,将第3个元素插入前面的有序子序列,前面2个元素是有序的。
第n-1趟插入,将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。
代码实现
运行结果:
直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。
直接插入的时间效率并不高,如果在最坏的情况下,所有元素的比较次数总和为(0+1+...+n-1)=O(n^2)。其他情况下也要考虑移动元素的次数,故时间复杂度为O(n^2)
直接插入空间效率很好,只需要1个缓存数据单元,也就是说空间复杂度为O(1).
直接插入排序是稳定的。
直接插入排序在数据已有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据,其效率就与冒泡排序法和选择排序法一样差了。
算法描述
对一个有n个元素的数据序列,排序需要进行n-1趟插入操作:
第1趟插入,将第2个元素插入前面的有序子序列--此时前面只有一个元素,当然是有序的。
第2趟插入,将第3个元素插入前面的有序子序列,前面2个元素是有序的。
第n-1趟插入,将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。
代码实现
package sort; public class InsertSortTest { public static int count = 0; public static void main(String[] args) { int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 }; print(data); insertSort(data); print(data); } public static void insertSort(int[] data) { for (int i = 1; i < data.length; i++) { // 缓存i处的元素值 int tmp = data[i]; if (data[i] < data[i - 1]) { int j = i - 1; // 整体后移一格 while (j >= 0 && data[j] > tmp) { data[j + 1] = data[j]; j--; } // 最后将tmp插入合适的位置 data[j + 1] = tmp; print(data); } } } public static void print(int[] data) { for (int i = 0; i < data.length; i++) { System.out.print(data[i] + "\t"); } System.out.println(); } }
运行结果:
5 3 6 2 1 9 4 8 7 3 5 6 2 1 9 4 8 7 2 3 5 6 1 9 4 8 7 1 2 3 5 6 9 4 8 7 1 2 3 4 5 6 9 8 7 1 2 3 4 5 6 8 9 7 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
相关文章推荐
- 排序算法Java实现(直接插入排序)
- 排序算法java 一 --快速排序、直接插入、希尔排序
- 五十道编程小题目 --- 28 八大排序算法 java 之 01直接插入排序
- 排序算法之直接插入排序(JAVA)
- java排序算法之直接插入排序
- 排序算法之直接插入排序(java实现)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 排序算法--Java实现直接插入排序
- 数据结构之排序算法Java实现(5)—— 插入类排序之直接插入排序算法
- 排序算法之直接插入排序的思想以及Java实现
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序算法之直接插入排序-Java-version
- Java排序算法——直接插入排序
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- 【排序算法】直接插入排序(java实现)
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- 插入排序之直接插入排序算法-java实现
- 排序算法【java实现】(一)直接插入排序
- Java排序算法(三):直接插入排序