2路插入排序

 
public class TwoSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int keys[] = { 10, 7, 9, 8, 1, 3, 5, 6, 4, 2 };
		int temp[] = new int[10];
		int arr_size = 10;
		bidir_insert(keys, temp, arr_size);
		for (int i = 0; i < 10; i++) {
			System.out.print(keys[i] + " ");
		}
	}

	public static void bidir_insert(int keys[], int temp[], int arr_size) {
		int i, first, last = first = 0;

		temp[0] = keys[0]; /* 将第一个元素放入辅助数组 */
		/* 利用辅助数组 temp 进行二路插入排序 */
		for (i = 1; i < arr_size; ++i) {
			if (temp[last] <= keys[i]) {
				temp[++last] = keys[i];
			} else if (keys[i] <= temp[first]) {
				first = (first - 1 + arr_size) % arr_size;
				temp[first] = keys[i];
			} else {
				int index;

				for (index = (last - 1 + arr_size) % arr_size;; index = (index - 1 + arr_size)
						% arr_size) {
					if (temp[index] <= keys[i]) {
						int mid = last++;
						/* 元素后移 */
						while (mid != index) {
							temp[(mid + 1) % arr_size] = temp[mid];
							mid = (mid - 1 + arr_size) % arr_size;
						}
						temp[(index + 1) % arr_size] = keys[i];

						break;
					}
				}
			}
		}

		/* 将 temp 的内容按顺序复制到 keys 中 */
		for (i = 0; i < arr_size; ++i) {
			keys[i] = temp[first];
			first = (first + 1) % arr_size;
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值