标签:
1 package com.trfizeng.insertionsort; 2 3 /** 4 * 5 * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight Insertion Sort) 6 * 7 */ 8 public class StraightInsertionSort { 9 public static int[] straightInsertionSort(int[] array) { 10 // 对传来的待排序数组进行合法验证 11 if (array != null && array.length != 0) { 12 // 用来控制已排序好记录下标 13 int j = 0; 14 // i = 0 把第一个当作是有序记录,之后的全部看着无序记录 15 for (int i = 1; i < array.length; i++) { 16 // 后一个跟有序记录最后一个比较 17 if (array[i] < array[i - 1]) { 18 // 把比有序记录最后一个小的数复制一份作为要插到有序记录的数,因为在赋值的过程会丢失 19 int temp = array[i]; 20 // 覆盖掉这个作为要插的记录使之当前有序记录数 + 1 21 array[i] = array[i - 1]; 22 // 因为在上面已经比较过了和覆盖过,所有要去除这2个数 23 j = i - 2; 24 // 拿着这个要插的数跟有序记录一一对比,只要比当前有序记录最后一个小的就把这个数后挪一位,为了保证插入排序是稳定的,不能是<= 25 while (j >= 0 && temp < array[j]) { 26 // 使记录后移 27 array[j + 1] = array[j]; 28 // 比较过就除去,有序记录数 - 1 29 j--; 30 } 31 // 最后把要插的数插到该插的位置 32 array[j + 1] = temp; 33 } 34 } 35 } 36 return array; 37 } 38 }
1 package com.trfizeng.test; 2 3 import com.trfizeng.insertionsort.StraightInsertionSort; 4 5 /** 6 * 测试类 7 * 8 * @author trfizeng 9 * 10 */ 11 public class SortTest { 12 // 待排序数组 13 static int[] array = new int[] { 6, 1, 4, 10, 11, 8, 7, 1 }; 14 15 /** 16 * 直接插入排序法测试 17 */ 18 public static void straightInsertionSortTest() { 19 System.out.print("待排序数组:[ "); 20 for (int i = 0; i < array.length; i++) { 21 System.out.print(array[i] + " "); 22 } 23 System.out.print("] "); 24 25 array = StraightInsertionSort.straightInsertionSort(array); 26 System.out.print("排好序的数组:[ "); 27 for (int i = 0; i < array.length; i++) { 28 System.out.print(array[i] + " "); 29 } 30 System.out.print("]"); 31 } 32 33 public static void main(String[] args) { 34 SortTest.straightInsertionSortTest(); 35 36 } 37 }
标签:
原文地址:http://www.cnblogs.com/trfizeng/p/4307725.html