展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

数组插入排序

  • 第1次推导
public class test {
public static void main(String[] args) {
int[] ints = {2,5,3,1,8,9};
int tmp; // 存储临时变量
int j; // 开始比较第几位的数
// 第1次
// 2,5,3,1,8,9
j = 1; // 比较索引1的数
tmp = ints[j]; // 取出值放到临时变量中
if (j>0){ // 直到比到第0位
if(tmp>ints[j-1]){
// 取出的值比前一个值大,则直接跳出
// break;
}else {
// 反之则第0位的值覆盖第1位
ints[j]=ints[j-1];
}
j--; // 上面直接跳出循环了,j=1
}
// 第2次
// 2,5,3,1,8,9
// 2,3,5,1,8,9
j = 2;
tmp = ints[j];
if (j>0){ // 直到比到第0位
if(tmp>ints[j-1]){
// 比较到中间时
ints[j]=tmp;
// 取出的值比前一个值大,则直接跳出
// break;
}else {
// 反之则第0位的值覆盖第1位
ints[j]=ints[j-1];
}
j--; // 比较第2次时就跳出了,j=1
}
// 第3次
// 2,3,5,1,8,9
// 1,2,3,5,8,9
j = 3;
tmp = ints[j];
if (j>0){ // 直到比到第0位
if(tmp>ints[j-1]){
// 比较到中间时
ints[j]=tmp;
// 取出的值比前一个值大,则直接跳出
}else {
// 反之则第0位的值覆盖第1位
ints[j]=ints[j-1];
}
j--; // 需要比较3次,j=0
}
// 如果tmp中存入的数是最小的,需要比较3次
// 当3次比较完后变成 2,2,3,5,8,9
// 需要将tmp插入位置0
if(j==0){
ints[0]=tmp;
}
}
}
  • 最终完善
public class test {
public static void main(String[] args) {
int[] ints = {2,5,3,1,8,9};
int tmp; // 存储临时变量
int j; // 需要与前面多个数比较
for (int i = 1; i < ints.length; i++) { // 需要取出数组长度-1次
tmp=ints[i];
j=i; // 取出第i个数,则至少比较i次,内循环
do{
if(tmp>ints[j-1]){
ints[j]=tmp; // 比较到中间位置结束的
break; // 直接结束的
}else {
// 移动位置,内循环次数减1
ints[j]= ints[j-1];
j--;
}
}while (j>0); // 比到第0位时结束
// 当取出的数是最小的数时,赋值给第0位
if(j==0){
ints[0]=tmp;
}
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
}
}
posted @   DogLeftover  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-09-29 马踏棋盘算法
2022-09-29 弗洛伊德算法
2022-09-29 迪杰斯特拉算法
点击右上角即可分享
微信分享提示