直接插入排序(java)

字数 236阅读 38

扑克牌是我们几乎每个人都可能玩过的游戏。最基本的扑克玩法都是一边摸牌,一边理牌。假如我们拿到了这样一手牌,如图9-5-1所示。啊,似乎是同花顺呀,别急,我们得理一理顺序才知道是否是真的同花顺。请问,如果是你,应该如何理牌呢?

应该说,哪怕你是第一次玩扑克牌,只要认识这些数字,理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧,顺序就算是理好了。这里,我们的理牌方法,就是直接插入排序法。

(以上内容来自: 程杰. “大话数据结构” )

假设初始序列53462。以下画了个图表示执行过程

直接插入排序
public class StraightInsertSort {
    public static int[] StraightInsertSort(int[] arr){
        int temp;
        for(int i = 1; i < arr.length; i++){ // 从第二个数开始插入,第一个默认有序
            if(arr[i] < arr[i-1]){ // 如果比第一个数大,就也有序;如果比第一个数小就要考虑插入
                temp = arr[i];//记录当前数
                int j;
                for(j = i-1; j >= 0 && arr[j] > temp; j--){//从后往前循环,比当前数大就往后挪一个位置
                    arr[j+1] = arr[j];
                }
                //循环执行完后把arr[j+1]这个位置腾出来了,这个位置就是该插入的位置
                arr[j+1] = temp;
            }
        }
        return  arr;
    }
}

推荐阅读更多精彩内容