Java学习——数据结构——插入排序

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网址

  1. 介绍
    插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

  2. 思想
    插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

  3. 思路
    Java学习——数据结构——插入排序_第1张图片

package com.Sort;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 插入排序
 */
public class InsertSort {
    public static void main(String[] args) {
        //int[] arr = {119,34,101,1};
        int arrSize = 80000;//定义数组大小
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//时间格式化
        int[] arr = createNumbers(arrSize);

        Date start = new Date();//开始时间
        System.out.println("开始: " + simpleDateFormat.format(start));

        insertSort(arr);

        Date end = new Date();//结束时间
        System.out.println("结束: " + simpleDateFormat.format(end));
    }

    //生成随机数数组
    public static int[] createNumbers(int arrSize) {
        int arr[] = new int[arrSize];
        for (int i = 0; i < arrSize; i++) {
            arr[i] = (int) (Math.random()*8000000);//生成一个0到8000000的数
        }
        return arr;
    }

    private static void insertSort(int[] arr) {
        int insertValue = 0;
        int insertIndex = 0;

        for (int i = 1; i <arr.length; i++) {//一共进行arr.length次插入

            //定义插入的数
            insertValue = arr[i];
            insertIndex = i-1;//被选中的插入数据前面的那个数的下标

            //找到插入的位置
            // 说明
            // 1. insertIndex >= 0 保证在给 insertVal 找插入位置,不越界
            // 2. insertValue < arr[insertIndex] 待插入的数,还没有找到插入位置
            while (insertIndex >= 0 && insertValue < arr[insertIndex]){
                arr[insertIndex+1] = arr[insertIndex];//需要将 arr[insertIndex] 后移
                insertIndex--;//下标往前走
            }

            //退出循环,找到插入位置insertIndex+1
            //如果插入的下标不等于当前的下标则插入
            if (insertIndex + 1 != i) {
                arr[insertIndex+1] = insertValue;
            }


            //System.out.println("第" +i+"轮排序之后");
            //System.out.println(Arrays.toString(arr));
        }
    }
}


你可能感兴趣的:(Java)