直接插入排序

直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

举例:

  如有序列:12,4,3,23,16;从第二位开始i=2,每次比较从i-1到第1位(从后向前比较,大的向后移动,遇到小的停止移动,然后插入)

  第一步:4<12,12移动至第2位,4插入第一位得:4,12,3,23,16;下次:i=3

  第二步:依次比较,3<12,移动12到后一位,3<4,移动4到后一位,3插入得:3,4,12,23,16;下次:i=4

  第三步:依次比较,23>12,不动;i=5

      第四步:依次比较,16<23,移动23至后一位,16>12移动结束,插入16,得:3,4,12,16,23

  完成。   

  

 1 import java.util.Arrays;
 2 
 3 public class Sort {
 4     /**
 5      * 插入排序
 6      * @param arr
 7      */
 8     public static void straightSort(int[] arr) {
 9         for (int i = 1; i < arr.length; i++) {//从第二位开始
10             if (arr[i] < arr[i - 1]) {//和前一位比较
11                 int j, val = arr[i];//插入值
12                 for (j = i - 1; arr[j] > val; j--) {//从后向前遍历比较,大于插入值向后移动一位
13                     arr[j + 1] = arr[j];
14                 }
15                 arr[j + 1] = val;//j值在循环中结束时减一,所以加1
16             }
17         }
18     }
19 
20     public static void main(String[] args) {
21         int arr[] = {1, 331, 2, 5, 6, 12, 312, 13, 1, 33, 123, 7, 12, 133, 444, 11, 3, 14};
22         int sirr[] = Arrays.copyOf(arr, arr.length);
23         int jrr[] = Arrays.copyOf(arr, arr.length);
24         straightSort(sirr);//插入排序
25         System.out.println("插入排序:" + Arrays.toString(sirr));
26         Arrays.sort(jrr);//api 排序
27         System.out.println("api排序:" + Arrays.toString(jrr));
28     }
29 }
Java

 

 

 

 

 

 

  

 

posted @ 2019-06-17 16:39  清月无声  阅读(114)  评论(0)    收藏  举报