编程语言
首页 > 编程语言> > 排序算法之插入排序

排序算法之插入排序

作者:互联网

排序算法-插入排序

基本介绍

插入排序属于内部排序,是对要排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的

算法思想

代码实现

package cn.imut.sort;

import com.sun.org.apache.xpath.internal.SourceTree;

import java.util.Arrays;

//插入排序
public class InsertSort {
    public static void main(String[] args) {
        int[] arr = {101, 34, 119, 1};
        insertSort(arr);
    }

    //插入排序
    public static void insertSort(int[] arr) {
        for(int i = 1; i < arr.length; i++) {
            int insertVal = arr[i];         //要插入的数(第二个列表的首位)
            int insertIndex = i - 1;        //要插入数的前一个数的下标(第一个列表的末尾的编号)
            //注:第一个列表是有序的
            //insertIndex > 0 保证 插入的位置不越界
            //insertVal < arr[insertIndex] 说明 要插入的数还没有找到插入的位置,否则它正常加入到最后即可
            //接着将 arr[insertIndex] 后移
            while(insertIndex >= 0 && insertVal < arr[insertIndex]) {
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex--;
            }
            //退出while循环时,说明插入的位置找到,insertIndex + 1
            arr[insertIndex + 1] = insertVal;

            System.out.println("第" + i + "轮插入");
            System.out.println(Arrays.toString(arr));
        }
    }
}

插入排序速度测试

public static void main(String[] args) {
    int[] arr = new int[80000];

    for(int i = 0; i < 80000; i++) {
        arr[i] = (int)(Math.random() * 8000000);        //生成一个[0,8000000) 数
    }
    Date date1 = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String format = simpleDateFormat.format(date1);
    System.out.println("排序前的时间是:" + format);

    insertSort(arr);

    Date date2 = new Date();
    String format1 = simpleDateFormat.format(date2);
    System.out.println("排序后的时间是:" + format1);
}

插入排序测试八万个数据,只需1秒

标签:arr,int,插入排序,insertIndex,插入,算法,排序
来源: https://www.cnblogs.com/yfyyy/p/12503145.html