java插入法排序
java插入法排序
原理:将所排序数组分为两块,一个是有序数组(排序好的数组,通常第一次是数组的第一个元素),另一个是待插入数组(剩余元素),首先将待插入数组的第一个元素赋给一个任意变量,然后使待插入数组的元素依次和有序数组的元素进行比较,若符合条件,则使有序数组的元素向后移动一位,则原来的位置就空了,再把待插入数组的那个元素放到有序数组的位置,重复上述过程,待插入数组元素不断减小,有序数组元素不断增加,直到待插入数组元素为0的时候,排序结束
实例:
我想对数组{9, 3,4,2
}进行升序排序
首先将数组分为两组,第一组有序数组为元素{9},第二组为待插入数组元素{3,4,2}
第一轮: 现将待插入数组第一个元素3赋给一个任意变量,然后 使9和3进行比较,因为9大于3,所以此时将有序数组元素9向后移动一位,下标为1的元素此时为9,而将值为3的任意变量放到元素9的位置,此时两数进行了交换,,待插入数组少了一个元素,有序数组多了一个元素,数组变为{3,9, 4,2
}
第二轮:此时有序数组为{3,9},待插入数组为{4,2},首先任意变量值为元素4,然后让9和待插入数组的第一个元素4进行比较,符合条件,所以9向后移动到元素4的位置,而任意变量移动到元素9的位置,从而进行了交换,接下来元素4和3再进行比较,不符合交换条件所以不交换,同样这次交换待插入数组少了一个元素,有序数组多了一个元素,数组变为{3,4,9 ,2
}
第三轮:重复上述过程,可得到最终排序结果{2,3,4,9}
优点:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,此时就需要用到插入法排序
源代码:
package suanfa;
import java.util.Scanner;
public class charu {
// 插入排序,从小到大
public static void main(String[] args) {
int arry[]= {66, 28,11,50,80};
int i,j,z;
for(i=1;i<arry.length;i++)
{
int min=arry[i]; //从待插入组取出第一个元素。
z=i-1; //i-1即为有序组最后一个元素(与待插入元素相邻)的下标
while(z>=0&&arry[z]>min) //注意判断条件为两个,j>=0对其进行边界限制。第二个为插入判断条件
{
arry[z+1]=arry[z] ;//有序数组向后移动一位
z--;
}
arry[z+1]=min; //找到合适位置,插入数据
}
System.out.print(" 最终顺序为");
for(int z1=0;z1<arry.length;z1++)
{
System.out.print(" "+arry[z1]);
}
}
}
上一篇: C# 反射(Reflection)
下一篇: 通过JAVA的反射调用类中的公有私有方法