排序算法(二)插入、希尔、快速排序

插入排序

思路: 插入排序由N-1趟排序组成,N是数组长度。将数组分成有序和无序两个部分,将无序部分的第一个元素作为待插入元素与有序部分的元素从后往前依次比较,在有序部分找到比它小的元素,此时比它小的元素后一个位置就是待插入元素插入的位置,后面的元素后移位置即可。

第一轮排序:将数组第1个元素看成有序状态,2-N个元素是无序状态,将第2个元素(待插入元素)与第1个元素比较(第1个元素是待查入元素前一个索引位置的元素

  • 如果第2个元素小于第1个元素时,将第1个元素后移一个位置,插入索引往前移动一位。
  • 否则,认为第2个元素是有序状态中最大的一个元素,将第2个元素放在当前插入索引的后一个位置上,并结束本轮的插入排序。
    此时将得到前两个元素是有序状态,3-N个元素是无序状态的数组。继续进行相同的比较插入操作。

第二轮排序 : 数组1,2两个元素是有序部分,3–N个元素无序。将第3个元素作为待插入元素先与2元素比较,再与1元素比较找到合适位置插入,结果形成一个前三个元素有序,4-N个元素无序的状态。直到第N-1轮排序后得到最终结果。

import java.util.Arrays;

public class InsertSort {
   
    public static void main(String[] args) {
   
        int[] arr = {
   34,8,64,51,32,21};
        insertSort(arr);
    }
    private static void insertSort(int[] arr){
   
        for(int i=1;i<arr.length;i++){
   
            int temp = arr[i];  //第i轮要插入的数
            int index = i-1;    //从插入的数的前一个索引位置开始比较
            //当索引不越界,且要插入的值比索引值小则将索引值后移一位,索引再前移1位
            while (index>=0 && temp <arr[index]){
     
                arr[index+1]=arr[index];
                index--;
            }
            arr[index+1]=temp;
            System.out.println("第"+i+"次排序");
            System.out.println(Arrays.toString(arr));
        }
    }
}
排序结果:
第1次排序
[8, 34, 64, 51, 32, 21]2次排序
[8, 34, 64, 51, 32, 21]3次排序
[8, 34, 51, 64, 32, 21]4次排序
[8, 32, 34, 51, 64, 21]5次排序
[8, 21
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值