2024/4/1 愚人节上课前14点

昨天看的塔菲讲的插入排序

插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌

反正就像打斗地主理牌,小的放前面,大的放后面,从后往前理牌


package com.atguigu.boot3web.demos.web;

import java.util.Arrays;

public class InsertSort {

    public static void insertSort(int[] arr){
        for(int i=1;i<arr.length;i++){
            int key=arr[i];
            int j=i-1;
            while(j>=0 && arr[j] >key){
                arr[j+1]=arr[j];
                j=j-1;
            }
            arr[j+1]=key;
        }
    }



    public static void main(String[] args) {
        int[] arr=new int[] {0,-9,10,81,72,6,-77,52};
        System.out.println("原始数组: "+ Arrays.toString(arr));
        insertSort(arr);
        System.out.println("排序后数组:"+Arrays.toString(arr));
    }
}


呃呃,csdn抄了一份康康


    public static void is(int[] arr,int n){
        for(int i=0;i<n-1;i++)
        {
            //记录有序序列最后一个元素的下标
            int end=i;
            //待插入的元素
            int tem=arr[end+1];
            //单趟排
            while(end>=0)
            {
                //比插入的数大就向后移
                if(tem<arr[end])
                {
                    arr[end+1]=arr[end];
                    end--;
                }
                else
                {
                    //比插入的数小,跳出循环
                    break;
                }
            }
            //tem放到比插入的数小的数的后面
            arr[end+1]=tem;
            //代码执行到此位置有两种情况:
            //1.待插入元素找到应插入位置(break跳出循环到此)
            //2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)
        }
    }


步骤:

1.从第一个元素开始,该元素可以认为已经被排序
2.取下一个元素tem,从已排序的元素序列从后往前扫描
3.如果该元素大于tem,则将该元素移到下一位
4.重复步骤3,直到找到已排序元素中小于等于tem的元素
5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置
6.重复步骤2~5

posted @ 2024-04-01 14:23  redzhengtao  阅读(16)  评论(0)    收藏  举报