归并算法--------归并排序

归并排序算法完全遵循分治模式。

操作:

分解:分解待排序的n个元素序列成各具n/2个元素的两个子序列。

解决:使用归并排序递归的排序两个子序列。

合并:合并两个已排序的子序列以产生已排序的答案。

代码如下:

package cn.bxit.ALg;

import java.util.Scanner;

public class wieghtLift {

	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		int length=scan.nextInt();
		int array[]=new int[length];
		for(int i=0;i<length;i++) {
			array[i]=scan.nextInt();
		}
		mergeSort(array,0,array.length-1);
		for(int i=0;i<array.length;i++) {
			System.out.print(array[i]+" ");
		}
	}

//归并排序
	public static void mergeSort(int array[], int low, int right) {
		if (low >= right) {
			return;
		}//当数组的头和尾相遇时,分解结束
		int mid = (low + right) >>> 1;
		mergeSort(array, low, mid);//分解左边
		mergeSort(array, mid + 1, right);//分解右边
		merge(array, low, mid, right);//开始合并
	}

	public static void merge(int[] array, int low, int mid, int right) {
		int s1 = low;//第一个归并段的开始
		int s2 = mid + 1;//第二个归并段的开始
		int temp[] = new int[right - low + 1];//定义一个零食的数组来存放合并起来的数据
		int k = 0;//临时数组的下标
		while (s1 <= mid && s2 <= right) {
			if (array[s1] <= array[s2]) {
				temp[k++] = array[s1++];
			} else {
				temp[k++] = array[s2++];
			} // 排序
		}
		while (s1 <= mid) {// 左边有剩余
			temp[k++] = array[s1++];
		}
		while (s2 <= right) {// 右边有剩余
			temp[k++] = array[s2++];
		}
		for (int i = 0; i < right - low + 1; i++) {
			array[low + i] = temp[i];
		} // 将临时数组的值传给array
	}

}

 运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平胸瑶女神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值