详解--归并排序

归并排序

最近因为要开始找工作了,看了看数据结构的基础算法—归并排序,它的思想很简单,但是你自己手敲代码的时候,感觉那个合并时候的索引值好乱,看得我头皮发麻,因此特意做了笔记。

 public class margeSortTest {
			    static int number=0;
			    public static void main(String[] args) {
			        int[] a = {26, 5, 98, 108, 28, 99, 100, 56 ,75,1,76743};
			        MergeSort(a);
			        System.out.println("********************");
					for (int i = 0; i < a.length; i++) {
						System.out.print(a[i]+"   ");
					}
			    }
				private static void MergeSort(int[] a) {
					
					sort(a,0,a.length-1);
					
				}
				
				private static void sort(int a[],int startIndex,int endIndex) {
					if(startIndex>=endIndex)
						return;
					//中间值
					int midIndex = (startIndex+endIndex)/2;
					sort(a, startIndex, midIndex);
					sort(a, midIndex+1, endIndex);
					
					//合并
					merge(a,startIndex,endIndex,midIndex);
					
				}
		private static void merge(int[] a, int startIndex, int endIndex, int midIndex) {
			int mergeArr[] =new int[a.length];
			//新数组的mergeArr索引--用于保存到改数组时存放的索引。
			int itemIndex = startIndex;
			//右侧开始的索引
			int rightSIndex = midIndex+1;
			//这里存放一个左侧的开始的索引值---用于后面的--将mergeArr  赋值给a数组
			int leftIndex = startIndex;
			//不越界的情况就合并
			while(startIndex <=midIndex && rightSIndex <= endIndex){
				//右边的数字大
				if(a[startIndex]>a[rightSIndex]){
					mergeArr[itemIndex++] = a[rightSIndex++];
				}
				//左边的数字比较大
				else{
					mergeArr[itemIndex++] = a[startIndex++];
				}
			}
			//越界的情况,需要将左边剩余的值放入数组
			while(startIndex<=midIndex){
				mergeArr[itemIndex++] = a[startIndex++];
			}
			//越界的情况,需要将右边剩余的值放入数组
			while(rightSIndex<=endIndex){
				mergeArr[itemIndex++] = a[rightSIndex++];
			}
			//用mergeArr更新a数组。
			for (int i = leftIndex; i <= endIndex; i++) {
				a[i] = mergeArr[i];
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值