排序算法之直接插入排序

根据寻找插入位置的方法对插入排序进行分类可以分为以下三类:

  1. 直接插入排序
  2. 折半插入排序
  3. 希尔插入排序

本篇主要介绍直接插入排序算法。

算法描述

插入排序的核心思想是每步将一个待排序的元素,按照其排序码的大小,插入到前面已经排好序的一组元素的合适位置上,直至元素全部插入完毕为止。如何为一个待排序元素在排好序的元素集合中寻找合适的插入位置是一个关键点,有三种合理的方法可以达到这个目的(这里将待插入元素记为A[i]):

  1. 从左到右扫描这个有序的子数组,直到遇到第一个大于等于A[i]的元素,然后就把A[i]元素插入到该元素的前面;
  2. 从右到左扫描这个有序的子数组,直到遇到第一个小于等于A[i]的元素,然后就把A[i]元素插入到该元素的后面。

1与2的实现思想被称为直接插入排序,3的实现方法成为折半插入排序。1与2的实现思想本质上是相同的,但是在实践中直接插入排序通常采用2中的思想。

算法分析

算法时间复杂度分析:
直接插入排序:
最好情况:O(n),输入数组按照升序排列好了
平均情况:O(n^2),比最坏情况快2倍
最坏情况:O(n^2),输入数组为严格递减数组

算法Java代码实现

直接插入排序算法代码:

import java.util.*;

public class InsertionSort {
    public int[] insertionSort(int[] A, int n) {
        // 输入数组边界判定
        if(A==null||A.length==0){
            return null;
        }

        for(int i=0;i<n-1;i++){

            for(int j=i+1;j>0;j--){
                //与前面元素依次比较,寻找合适的插入位置
                if(A[j]<A[j-1]){ 
                    int temp = A[j];
                    A[j] = A[j-1];
                    A[j-1] = temp;
                }
            }
        }

        return A;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值