排序问题—插入排序

插入排序:
思路:
将整个数组划分为有序区间和无序区间。每次取无序区间的第一个元素,在有序区间里从后往前遍历找合适位置插入,并将有序区间进行搬运,保证插入后有序区间仍是有序的。用两个循环嵌套,外部循环更新bound的值,更新区间划分,内部循环用来给无序区间查找合适位置。(要注意边界情况)
时间复杂度:O(N^2);
空间复杂度:O(1);
稳定性:稳定
在这里插入图片描述

特点:

  1. 当待排序区间的元素较少时,排序效率很高。
  2. 当整个数组比较接近有序时,效率较高。

基于上特点,有优化插入排序的方法:希尔排序。

在这里插入图片描述

package sort;

import java.util.Arrays;

public class insertSort {
    //插入排序,默认升序
    public static void insertSort(int [] array){
        for (int bound=1;bound<array.length;bound++){
            //[1,bound):已排序区间
            //[bound,size):未排序区间
            int v=array[bound];//将bound位置的元素先备份一份,
                              // 这是未排序区间的第一个元素
            //cur保存已排序区间的最后一个元素
            int cur= bound-1;
            //将bound在已排序区间中找到合适的位置插入,从后往前查找
            for (;cur>=0;cur--){
                //要去跟v比较,不要跟array[bound]比较,因为bound的值下次就变了
                if (v < array[cur]){
                //如果这里改为<=,则排序不稳定
                    //若cur的值大,则将cur向后调整
                    array[cur+1]=array[cur];
                }
                else {  //若v的值大,则不动
                   break;
                }
            }
            //将备份的bound-1的值,向前调整,因为循环里cur--了,所以这里要cur+1
            array[cur+1]=v;
        }
    }
    public static void main(String[] args){
        int[] array={9,5,6,0,4,2,7,3,8};
        insertSort(array);
        System.out.println(Arrays.toString(array));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值