插入排序算法
比如下面的一个数组:
12,8,2,7,15,6,4,11
假如从小到大进行排序,从第二个元素开始,比较其与前面子列中元素的大小,如果找到第一个比它小的元素那么就将它插入到该元素之后,以此类推。
第一次的结果:8,12,2,7,15,6,4,11
对应的操作:8与12进行过比较,8小于12,于是将8放到12前面,成为第一个元素,前两个元素有序。
第二次的结果:2,8,12,7,15,6,4,11
对应的操作:2小于12,2小于8,于是2放到8前面,成为第一个元素,前三个元素有序。
第三次的结果:2,7,8,12,15,6,4,11
对应的操作:7小于12,7小于8,7大于2,于是7放到2后面,前四个元素有序。
第四次的结果:2,7,8,12,15,6,4,11
对应的操作:15大于12,不动,前五个元素有序。
第五次的结果:2,6,7,8,12,15,4,11
对应的操作:6小于15,6小于12,6小于8,6小于7,6大于2,于是6放到2后面,前六个元素有序。
第六次的结果:2,4,6,7,8,12,15,11
对应的操作:4小于15,4小于12,4小于8,4小于7,4小于6,4大于2,于是4放到2后面,前七个元素有序。
第七次的结果:2,4,6,7,8,11,12,15
对应的操作:11小于15,11小于12,11大于8,于是11放到8后面,排序完成。
下面是java代码的实现:
/**
* Insert Sort Test
* @author leidong
*
*/
public class Sort1 {
//定义一个长度为10的整形数组
private static int[] nums = new int[10];
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化数组nums
initNums(nums);
//打印数组nums
System.out.println("排序前的数组:");
printNums(nums);
//对数组nums进行插入排序处理(从小到大)
sort(nums);
//再次打印经过排序后的数组nums
System.out.println("排好序后的结果:");
printNums(nums);
}
/**
* 初始化数组
* @param nums
* @return
*/
private static int[] initNums(int[] nums){
Random r = new Random();
//随机生成0~9的整数赋给数组nums中的各个元素
for(int i = 0; i < nums.length; i++){
nums[i] = r.nextInt(10);
}
return nums;
}
/**
* 打印输出数组
* @param nums
*/
private static void printNums(int[] nums){
for(int i = 0; i < nums.length; i++){
System.out.print(" " + nums[i]);
}
System.out.println();
}
/**
* 插入排序方法的实现
* @param nums
* @return
*/
private static int[] sort(int[] nums){
for(int i = 0; i < nums.length; i++){
int temp = nums[i];
int j = i;
for(; j > 0 && temp < nums[j-1]; j--){
nums[j] = nums[j-1];
}
nums[j] = temp;
}
return nums;
}
}
输出结果: