- 第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]);
}
}
}
标签:tmp,数组,int,插入排序,public,--,ints,比较
From: https://www.cnblogs.com/dogleftover/p/17736997.html