排序

插入排序

所谓的插入排序,就是设数组的子数组是有序的,然后对未排序的子数组排序。想一个场景,比如你打麻将或者扑克的时候,对牌的排序就是插入排序。
设有数组nums = [3, 1, 2, 4],在这个未排序的数组里面,我们先使第0个元素是有序的,然后第一个元素小于第零个元素,对他们进行交换,此时的形式是[1, 3, 2, 4],交换后原先的第一个元素前面没有元素了,结束本趟排序。
然后第二趟子数组[1, 3]已经有序了,对为排序的第二个元素,即2,先与第一元素比较,即3,小于,交换,此时的形式是[1, 2, 3, 4],此时第二个元素的位置变为1,前面还有元素,继续比较,大于第一个元素,不交换。
还剩最后一个元素,4,与第二个元素3比较,大于,不交换。
Talk is cheap. Show me the code.
Python

class Sort():

    def __init__(self):
        pass

    @staticmethod
    def insert_sort(nums):
        #插入排序
        for i in range(1, len(nums)):
            for j in range(i, 0, -1):
                if nums[j] < nums[j-1]:
                    nums[j-1], nums[j] = nums[j], nums[j-1]

        return nums

运行时间26441.31纳秒
但是如果将交换的形式写成

t = nums[j-1]
nums[j-1] = nums[j]
nums[j] = t

时间是39661.97ns。Python魔法好。
Java

    public static void insertSort(int[] nums) {
        for (int i = 1; i < nums.length; ++i) {
            for (int j = i; j > 0; --j) {
                if (nums[j-1] > nums[j]) {
                    int temp = nums[j];
                    nums[j] = nums[j-1];
                    nums[j-1] = temp;
                }
            }
        }
    }
点赞