JAVA排序之插入排序

package com.test;

public class InsertSort {

public static void main(String[] args) {

	int numbers[] = { 3, 7, 5, 1, 67, 9, 2, 34, 12, 45 };
	//从方法1到方法3代码逐渐优化
	insertSort1(numbers);
	insertSort2(numbers);
	insertSort3(numbers);
}

// =====插入排序=====
// 每次循环就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列中。
//
// 3 7 5 1 67 9 2 34 12 45 第1次循环后(i=1,此时7>3,不做任何改变)
// (开始第2次循环,i=2,此时5<7,把7向后移,把5放到7的位置)
// 3 5 7 1 67 9 2 34 12 45 第2次循环后
// (开始第3次循环,i=3,此时1<7,1<5,1<3,,把7,5,3向后移动,把1放到3,5,7前面)
// 1 3 5 7 67 9 2 34 12 45 第3次循环后
// 1 3 5 7 67 9 2 34 12 45 第4次循环后
// 1 3 5 7 9 67 2 34 12 45 第5次循环后
// 1 2 3 5 7 9 67 34 12 45 第6次循环后
// 1 2 3 5 7 9 34 67 12 45 第7次循环后
// 1 2 3 5 7 9 12 34 67 45 第8次循环后
// 1 2 3 5 7 9 12 34 45 67 第9次循环后

private static void insertSort1(int[] numbers) {

	int size = numbers.length;
	for (int i = 1; i < size; i++) {
		int temp = numbers[i]; // 用一个临时变量temp存放当前位置的值
		int index = i; // 用index记录 所要插入位置的坐标
		for (int j = i; j > 0; j--) {
			// 如果temp小于它前面的一个数,将temp前面的数向右移动一位,直到找到合适的位置
			if (temp < numbers[j - 1]) {
				numbers[j] = numbers[j - 1];
				index = j - 1; // index记录 所要插入位置的坐标
			} else {
				break;
			}
		}
		numbers[index] = temp; // 将temp放到所要插入的位置
	}
}

private static void insertSort2(int[] numbers) {

	int size = numbers.length;
	for (int i = 1; i < size; i++) {
		int temp = numbers[i]; // 用一个临时变量temp存放当前位置的值
		int index = i; // 用index记录 所要插入位置的坐标
		for (int j = i; j > 0 && temp < numbers[j - 1]; j--) {
			numbers[j] = numbers[j - 1];
			index = j - 1; // index记录 所要插入位置的坐标
		}
		numbers[index] = temp; // 将temp放到所要插入的位置
	}
}

private static void insertSort3(int[] numbers) {

	int size = numbers.length;
	for (int i = 1; i < size; i++) {
		int temp = numbers[i]; // 用一个临时变量temp存放当前位置的值
		int j; // 用j记录 所要插入位置的坐标
		for (j = i; j > 0 && temp < numbers[j - 1]; j--) {
			numbers[j] = numbers[j - 1];
		}
		numbers[j] = temp; // 将temp放到所要插入的位置
	}
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值