插入排序

插入排序(来自百度百科)
      插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是一种稳定的排序方法。

这里写图片描述

思路过程

  1. 从第二个元素开始循环,循环比较前一个元素,找到比前一个元素小的元素num1
  2. 再从头开始循环找到比num1 大的元素num2,num2 元素所在的位置就是num1 元素要插入的位置
  3. num2(包括num2) 之后与num1之前的所有元素向后移动一个位置,注意移动元素要从后往前循环移动
  4. 将元素num1 插入在num2 位置上,一次插入排序完成,接着继续沿着角标循环比较,循环结束排序结束

代码实现

public static void insertSort1(int[] array){
        for(int i=1; i<array.length; i++){
            if(array[i-1] > array[i]) {
                int temp = array[i];
                for(int j=0; j<=i-1; j++){   //查找元素要插入的位置
                    if(array[j] > array[i]){       
                        for(int k=i-1; k>=j; k--){      //找到插入的位置后,将对应的元素向后移动
                            array[k+1] = array[k];
                        }
                        array[j] =  temp;      //插入元素
                        break;
                    }
                }
            }
        }
    }

上面这种方式通过三个循环完成插入排序,效率性对较低。在这里补充另外一种插入排序的方法,只需要两次循环就能完成插入排序,相率较上一种方法要高。

这里写图片描述

思路过程

  1. 仍然是从第二个元素开始循环,循环比较前一个元素,找到比前一个元素小的元素num1
  2. 这次从num1 元素所在的位置往前循环,只要前一个元素比num1 大就交换位置
  3. 循环到第一个元素结束,一次插入排序完成,仍然保持在插入元素后序列是有序的,接着继续沿着角标循环比较,循环结束排序结束

代码实现

 public static void insertSort2(int[]  array){
        for(int i=1; i<array.length; i++){
            if(array[i-1] > array[i]){
                for(int j=i; j>0; j--){
                    if(array[j] < array[j-1]){
                        int temp = array[j];
                        array[j] = array[j-1];
                        array[j-1] = temp;
                    }
                }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值