排序算法三:插入排序

思路分析:

从数组的第二个位置开始,记录当前要进行插入的元素值为insertValue,此元素的前一个位置的索引为insertIndex,把insertValue与前面的一个元素相比较,如果大于前面的元素,则直接在此位置插入,如果小于前面位置上的元素,则把前面位置上的元素后移,即arr[insertIndx + 1] = arr[insertIndex],索引insertIndex–1,再进行下一次判断,直到找到可以插入的位置,这里要注意角标越界问题

代码展示:

package com.monster.sort;

import java.util.Arrays;

/**
 * @author Monster
 * @version v1.0
 * @time 03-18-2021 15:59:52
 * @description: 插入排序法
 */
public class InsertSort {

    public static void main(String[] args) {
        
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        System.out.println(Arrays.toString(arr));
        insertSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void insertSort(int[] arr) {

        for (int i = 1; i < arr.length; i++) {
            int insertValue = arr[i];
            int insertIndex = i - 1;

            while (insertIndex >= 0 && insertValue < arr[insertIndex]) {
                arr[insertIndex + 1] = arr[insertIndex];
                insertIndex --;
            }
            arr[insertIndex + 1] = insertValue;
        }
    }
}

比较冒泡排序、选择排序、插入排序

  • 冒泡排序是每相邻的两个元素都要进行比较大小,如果满足条件就交换位置,比较、交换的次数太多,效率极低,80000个数据执行时间为11104毫秒

  • 选择排序,每一个元素都要跟后面所有的元素进行比较,找出最小的元素并记录其角标,然后进行交换,交换次数最多n – 1次,效率较高,80000个数据执行时间为2198毫秒,比冒泡快了5倍左右

  • 插入排序,每一次都和前面的数据比较,只要找到比其大的数就可以插入,比选择排序比较的次数少了许多;这里不需要交换位置,但多了数据的后移操作,效率更高,80000个数据执行时间为653毫秒,比冒泡快了3~4倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值