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

浙公网安备 33010602011771号