【排序】归并排序

归并排序:先排序,后归并
快速排序:先划分,后排序。

下图是归并排序的思想。
在这里插入图片描述

归并排序

static void mergeSort(int[] A, int p, int r){
		if(p<r){
			int mid = p + ((r-p)>>2);
			mergeSort(A,p,mid);
			mergeSort(A,mid+1,r);
			merge(A,mid,p,r);//归并
		}
	}

归并算法

static void merge(int[] A, int mid, int p, int r){
		int current = p;
		int left = p;
		int right = mid+1;
		
		int [] helper = new int[A.length];
		for(int i = 0; i < A.length; i++){
			helper[i] = A[i];
		}
		
		while(left<=mid&&right<=r){
			if(helper[left]<=helper[right]){
				A[current] = helper[left];
				current++;
				left++;
			} else {
				A[current] = helper[right];
				current++;
				right++; 
			}
		}
		
		while(left<=mid){
			A[current] = helper[left];
			current++;
			left++;
		}
	}

主函数

public static void main(String[] args) {
		int[] arr = {2,4,3,1,5,6,7,4};
		mergeSort(arr, 0, arr.length-1);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
发布了81 篇原创文章 · 获赞 13 · 访问量 2388

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104174172