插入排序 【InsertionSort】

插入排序

插入排序的工作方式像排序一手扑克牌。 假设左手的牌是排序好的,桌面上的是未知的牌
1. 开始时,我们的左手为空并且桌子上的牌面向下。
2. 然后,我们每次从桌子上拿走一张牌并将它插入左手正确的位置。 为了找到插入的正确位置,我们将要插入的牌与左手的牌挨着比较,直接找到合适的位置并插入进去。

在实际的实现过程中,我们可以将数组的第0个元素看成是已经排序好的,然后从第二个元素开始进行插入。

算法实现

public class InsertionSort {

    public void insertionSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return ;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0 && arr[j] < arr[j-1] ; j--) {
                swap(arr, j, j-1);
            }
        }
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp; 
    }
}

时间复杂度

因为每次插入的时候都需要去比较,所以时间复杂度为O(N^2)

稳定性

因为插入的数据是挨着顺序进入的,所以排序前后的相对顺序是不会改变的。所以是稳定的算法。

猜你喜欢

转载自blog.csdn.net/u013435893/article/details/79968607