java之插入排序(直接插入排序)

  1. 什么是插入排序?
    插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
  2. 实战
    有这样一个数组
int arr[]={ 2,5,1,4,3,6 } 

现在开始进行插入排序

从左往右开始排
虚拟一个变量key来存放要插入的数。
虚拟一个变量site 存放要插入的数原本的位置。
首先认定 0 位置上的 2 ,已经是排好的序列了。
那么我们就是从第 1 个位置开始进行比较插入。
进行第一次比较
将第 1 位置上的 5 存入变量key ,并将位置 1 存入site。用这个key值来和前一位置上的值 2 进行比较,由于 5 是大于 2 的 ,因此将 5 插入到 2 后面的一个位置 既刚刚变量 site 记录的 1 号位,值为 5 。此时arr数组是这样的:{ 2,5,1,4,3,6 } 
进行第二次比较
将 2 位置上的值 1  存入变量key,并将位置 2 存入变量site,然后开始与 1 号位的值 5 进行比较。由于值1是小于5的,所以将1号位上的值5赋值给2号位。如果此时print的话 ,是这样的:{ 2,5,5,4,3,6 }  , 再次 与 0 号位的值 2 做比较。1依然是小于值 2 的,所以此时将 值 2 后移一位,赋值给 1 号位,此时print的话是这样的{ 2,2,5,4,3,6 } 。 由于已经是比较到最前面的位置了,即 0 号位,不能在比较插入。此时将key的值赋值给site位,即 0 号位,此时是这样的{ 1,2,5,4,3,6 }
依次类推:
第三次 { 1,2,4,5,3,6 }
第四次 { 1,2,3,4,5,6 }

3, 代码

1号位开始比较,一共比较多少次?
    for(int i =0;i<arr.length-1;i++){}
虚拟变量存放 值 和 位置
    int key = arr[i];
    int site= i ;
开始比较
    while(site>=0 && arr(site-1)>key){
        arr[site] = arr[ site -1] ;
        site -- ;
    }
最后将当前元素插入:
    arr[site] = key ;

完整代码是这样的:

    int arr[] ={ 2,5,1,4,3,6,7};        
        for (int i = 1; i < arr.length-1; i++) {
            int key = arr[i];
            int site = i;           
            while (site > 0 && arr[site - 1] > key) {
                arr[site] = arr[site - 1];              
                site--;            
            }           
            arr[site] = key;            
        }
    }

补张图
插入排序
收工,结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值