Java直接插入排序

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤

1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列

2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

算法图示

算法基本性能

排序方法 平均时间复杂度情况 最好情况 最坏情况 空间复杂度 稳定性
插入排序 O(n2) O(n) O(n2) O(1) 稳定

Java代码

package com.sort;

import java.util.Random;

public class Main {

    // 从小到大
    private static void sort(int[] array) {
        if (array.length <= 1) {
            return;
        }
        for (int i = 1; i < array.length; i++) {
            /**
             * 因为0~i-1为有序的,如果i位置的大于i-1位置的,说明0~i也是有序的,
             * 反之需要在0~i-1直接找出i位置的元素的正确位置插入
             */
            if (array[i] < array[i - 1]) {
                /**
                 * 先保存i位置元素
                 */
                int temp = array[i];
                int j = i - 1;
                /**
                 * 从i-1开始向前查找,一直到找到比i位置元素小的位置,然后插入
                 */
                for (; j >= 0 && array[j] > temp; j--) {
                    /**
                     * 没有找到,那么将此位置的元素后移一位,腾出位置
                     */
                    array[j + 1] = array[j];
                }
                /**
                 * 将i位置元素放在腾出的位置上面
                 */
                array[j + 1] = temp;
            }
        }
    }

    /**
     * 获取指定长度的随机数组
     */
    public static int[] getRandomArray(int n) {
        int[] array = new int[n];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(500);
        }
        return array;
    }

    /**
     * 打印指定数组
     */
    public static void outputArray(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        int[] array = getRandomArray(10);
        outputArray(array);
        sort(array);
        outputArray(array);
    }
}
posted @ 2016-08-19 10:19  27House  阅读(604)  评论(0编辑  收藏  举报