相信扑克牌大家都玩过,当随机发给你一捋扑克牌,你会先将牌理好,然后再想一下这手牌的好坏。那你会怎样将这捋扑克牌理好呢?
这时你可以借助「插入排序」的算法思想:从最后一张牌开始看,看这张牌之前的牌比它大还是小,如果前面的牌比它大(假设进行升序排序),那就继续往前看一张,直到看到第一张比它小的牌。此时你就可以将它插在比它小的牌后边。如果发现看到这捋牌的第一张,发现每张都比它大,那说明它是最小的,直接插在第一张的位置就好了。插好这张牌的位置后,继续从后往前看下一张牌,重复上述步骤,直到最后一张牌看完为止。
public class InsertionSort { private InsertionSort () { } public static void sort (Comparable[] arr) { int n = arr.length; for (int i = 0 ; i < n; i++) { Comparable e = arr[i]; int j = i; for (; j > 0 && arr[j - 1 ].compareTo(e) > 0 ; j--) arr[j] = arr[j - 1 ]; arr[j] = e; } } public static void sort (Comparable[] arr, int l, int r) { for (int i = l + 1 ; i <= r; i++) { Comparable e = arr[i]; int j = i; for (; j > l && arr[j - 1 ].compareTo(e) > 0 ; j--) arr[j] = arr[j - 1 ]; arr[j] = e; } } }