一、插入排序原理
将数组中的元素,逐一与已安排好的数据进行比较,前两个元素先排好,再将第三个元素插入适当的位置,所以这三个元素仍然是已排好的,接着再将第四个元素加入,重复此步骤,直到排序完成为止。下面以10、5、30、15、6等5位数进行图形演示。
代码:
package Sort;
public class Sort {
//定义排序的数组并给予赋值
private static Integer[] nums = {10,5,30,15,6};
//插入排序
private static void Insertion_Sort(){
System.out.println("---插入排序---");
// 预设数组空间大小。
Integer[] nums2 = new Integer[5];
//数组赋值
nums2[0] = nums[0];
//设数组第二位为空也就是下表为1
Integer nullPosition = 1;
//外层循环插入数值
for (int i = 1;i < nums.length;i++){
Boolean flag = false;
//内层循环找到插入元素的位置
for (int j = 0;j < nullPosition;j++){
//nums[i]代表要插入的元素
//num2[j]代表有序数组的元素
if (nums[i] < nums2[j]){
//从尾到头的移动过程
for (int m = nullPosition;m > j;m--){
//开始移动
nums2[m] = nums2[m - 1];
}
//新元素插入
nums2[j] = nums[i];
//为下面的插入提供判断条件
flag = true;
nullPosition++;
//跳出内循环
break;
}
}
if (!flag){
nums2[nullPosition] = nums[i];
nullPosition++;
}
System.out.print("第"+i+"次插入后的排序:");
// 每次内层循环结束后,打印一次数组,看到中间排序过程
for(int n = 0; n < nums2.length; n++) {
System.out.print(nums2[n] + "\t");
}
System.out.println();
}
}
public static void main(String[] args) {
//插入排序
Insertion_Sort();
}
}
运行结果截图