java排序算法一(插入排序法)

5 篇文章 0 订阅


插入排序算法

        

        比如下面的一个数组:

       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;
	}

}

输出结果:


        

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值