插入排序

插入排序

对于基本有序的数组最好用,当然下面的数组并不有序

形式相似与打牌,抓一张牌,与前面的数一一对比,小于则往前排(基本有序)

第一步,先搭建框架(实现自己会写的部分,将能合并的封装成一个方法)

public static void main(String[] args)
{
    int[] a = {456, 15, 64, 5, 451, 3213, 123, 13, 545, 5332, 131};
    sort(a);
    print(a);
}

public static void sort(int[] a)
{

}

public static void swap(int[] a, int i, int j)
{
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

public static void print(int[] arr)
{
    for (int i = 0; i < arr.length; i++)
    {
        System.out.print(arr[i] + " ");
    }
}

第二步,思考sort方法该如何去写。

第一个开始直到N-1这个位置(数组下标),一直往前找

 public static void sort(int[] a)
{
    for (int i = 0; i < a.length; i++)
    {
        for (int j = i; j > 0; j--)
        {
            if (a[j] < a[j - 1])
            {
                swap(a, j, j - 1);
            }
        }
    }
}

第三步:优化sort,可以把a[j] < a[j - 1]直接放到for循环里,用&&连接可以省去if循环。(优化不大,语句变短)

空间复杂度O(1)

时间复杂度O(n^2)最好情况(不须排序)O(n)

比冒泡排序来的效率高,比选择排序也快一些。

排序方法对比:

1.冒泡排序,太慢比较交换太多

2.选择:不稳定

3.插入:样本教小,基本有序,效率高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值