插入排序(insertion sort)

直接插入排序

    插入排序(insertion sort)

排序过程如上图(图非原创)

该排序原理如下:

       将一个拥有n个元素的待排序的数据序列R数组当成两个序列(本身还是一个序列),一个有序序列,一个无序序列。刚开始时,有序序列中只有一个元素,也就是R[0],而无序序列中则是R[1]到R[n-1]。然后每次拿出无序序列中第一个元素,此时是R[1],将其与有序序列中的最后一位数字作比较,如果无序序列中的第一个元素<有序序列中的最后一个元素,说明此时要对该数字进行排序。而排序的操作则是将无序序列中的第一个元素进行缓存到变量temp,然后与有序序列中的最后一个元素比较,如果temp比有序序列中的最后一个元素小,那么将有序序列的最后一个元素向后移动一位,然后接着拿有序序列中的前一位与temp比较,直到找到这个数值(temp)合适的位置,然后将该数值直接插入到该位置上。所以叫做直接插入排序。

具体代码如下:

public int[] sort(int[] sort) {
        int temp;                              // 监视哨,也就是缓存即将用于比较的数字
        int i, j;
        // 从数组第2个数字开始与前一个数字比较
        for (i = 1; i < sort.length; i++) {
            if (sort[i] < sort[i - 1]) {
                temp = sort[i];                 // 将要进行插入的数字缓存
                // 查找这个数字的适当位置
                // 将缓存的数字temp与有序序列中最后一位数字依次向前进行比较,
                // 如果它比有序序列中的数字小,那么将有序序列中的那个数字向后移一位,
                // 否则该位置就是temp元素应该在的位置,那么插入该数字即可。
                for (j = i ; j > 0 && sort[j-1] > temp; j--) {
                    sort[j] = sort[j-1];
                }
                sort[j] = temp;
            }
        }
        return sort;
    }


你可能感兴趣的:(插入排序(insertion sort))