插入排序基本实现

插入排序

请添加图片描述

插入排序思想

默认数组第一个已经是有序的,取后一个数组值与前面有序的数组从后往前依次比较(当取到后一个数组值时先与前一个比较,如果比他小,就将前一个的下标往后移动一个,依次重复),当比较到比前面一个值大时,将这个数组值插入到有序的数组当中。

具体实现思路

  1. 双重for循环去遍历数组,默认第一个数组值就是有序的,之后每一次内层for循环一次,有一个数的位置就被定位到,并且加入到前面的有序数组当中,而当下一次for循环开始时,就从已经排好序的下一个值开始遍历(外层循环 i 的值就是已经排好序的最后一个值的下标),直到将所有数排完。

  2. 关于两个for循环的取值和范围:
    ①外层for主要是确定循环的次数,因为内层for用的是j=i+1(i当做已经排好序的最后一个,要取下一个就从i+1取),因此范围只能到i小于数组长度-1。
    ②内层for主要是从i的后一个开始依次往前比较,所以要用j–从后往前遍历比较,那么j的取值就是i+1开始,那么j的取值范围就是j>0。

  3. 内层for排序
    ①先将后一个元素取出来,后一个元素就是j;然后先与前面一个数比较一次,如果已经是比前一个元素大,那么循环就不用执行,(if(j>j-1);break),不满足条件就继续往下执行。因为后一个元素j已经与第i个元素也就是j-1比较完成了,所以要继续往前比较,那么这时就需要将两个数调换位置,调换完位置之后,之前取出的后一个元素已经往前移动了一个位置(j–),继续执行for循环,直到j>0.

  4. 当外层for执行完成,i要++,因为内层for已经完成了对后一个数的排序,应该将有序数组的长度扩大一个,那么内层for下一次还是从有序数组后一个进行比较,如此循环直到整个数组全部插入成功。

具体代码

//插入排序
public class InsertionSort2 {
    public static void main(String[] args) {
        int[] arr ={12,4,18,75,47,23,14};//模拟待排序数组
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i+1; j >0 ; j--) {
                if (arr[j]>arr[j-1]){
                    break;
                }
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] =temp;
            }
        }
        for (int num:arr) {
            System.out.println(num);
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值