1 /*
2 本例拟在实现插入排序
3 插入排序:
4 类似扑克牌的排序,开始时,左手为空,所有的牌位于桌面上。然后,每次从桌上拿起一张牌并插入到左手正确位置。
5 注意点:左手中的牌始终是排好序的,比较时,将要比较的牌从左手最后一张牌开始比较,如果要比较的牌大,就直接放入左手最后一张
6 否则,再与倒数第二张比较,直到找到符合条件的位置
7 */
8 public class Insertion
9 {
10 public static void main(String[] args)
11 {
12 int[] a = {8,5,0,9,6,2,4,1};
13 sort(a);
14 for(int i=0; i<a.length; i++)
15 {
16 System.out.print(a[i] + " ");
17 }
18 }
19
20 public static int[] sort(int[] a)
21 {
22 for(int i=1; i<a.length; i++)//假设左手中已经有一张牌
23 {
24 int key = a[i]; //key是用来往左手中插入的牌
25 int j = i-1; //用key与左手中最后一张牌比较(左手中的牌已经排过序)
26 /*
27 如果左手中最后一张牌大于key,则需要将key与左手中倒数第二张牌进行比较,此时将左手最后一张牌的序号增加1,以此类推
28 如果左手最后一张牌小于key,则直接将该牌放在左手最后一张
29 */
30 while(j>=0 && a[j] > key)
31 {
32 a[j+1] = a[j];
33 j = j-1;
34 }
35 a[j+1] = key;
36 }
37 return a;
38 }
39 }