插入排序的几种方式

1.比较完后,统一后移后插入

public static int[] insertSort(int[] arr) {
		int len = arr.length;
		for (int i = 1; i < len; i++) {//循环n-1次
			for (int j = 0; j < i; j++) {//每次与前面i个元素比较
				if (arr[j] > arr[i]) {
					int temp = arr[i];
					int k = i;
					while (--k >= j) {
						arr[k + 1] = arr[k];
					}
					arr[j] = temp;
					break;
				}
			}
			SortUtil.printArray(arr);
		}
		return arr;
	}

2.比较完后,都与带插入的元素交换

public static int[] insertSort(int[] arr) {
		int len = arr.length;
		for (int i = 1; i < len; i++) {//循环n-1次
			for (int j = 0; j < i; j++) {//每次与前面i个元素比较
				if (arr[j] > arr[i]) {
					int temp = arr[j];
					arr[j] = arr[i];
					arr[i] = temp;
					while (++j < i) {
						temp = arr[j];
						arr[j] = arr[i];
						arr[i] = temp;
					}
				}
			}
			SortUtil.printArray(arr);
		}
		return arr;
	}

3.一边比较一边后移插入

public static int[] insertSort(int[] arr) {
		int len = arr.length;
		for (int i = 1; i < len; i++) {//循环n-1次
			if (arr[i - 1] > arr[i]) {
				int temp = arr[i];
				int j = i - 1;
				while (j >= 0 && arr[j] > temp) {
					arr[j + 1] = arr[j];//[1,n],[0,
					j--;
				}
				arr[j + 1] = temp;
			}
			SortUtil.printArray(arr);
		}
		return arr;
	}

4.与前面i个元素从右往左开始比较

public static int[] insertSort(int[] arr) {
	for (int i = 1; i < arr.length; i++) {//插入N-1次 N-1
		for (int j = i - 1; j >= 0; j--) {//每次从第i个开始,与前面i个元素比较 i;[1,n-1],j:[0,n-2] = [0,i-1]
			if (arr[i] > arr[j]) {//若插入元素比某个位置大,则取他后面一个元素进行交换
				int temp = arr[i];
				arr[i] = arr[j + 1];
				arr[j + 1] = temp;
				while (++j < i) {
					temp = arr[i];
					arr[i] = arr[j + 1];
					arr[j + 1] = temp;
				}
				break;
			} else if (0 == j){
				while (j < i) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
					j++;
				}
			}
		}
		SortUtil.printArray(arr);
	}
	return arr;
}

 

public class SortUtil {
	public static void printArray(int[] arr) {
		for (int a : arr) {
			System.out.print(a + " ");
		}
		System.out.println();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值