C++实现归并排序笔记

C++实现归并排序笔记

#include<iostream>
using namespace std;

void mergeSort(int a[],int left,int right);
void merge(int a[],int left,int mid,int right); 

int main() {
    
    
	int a[] = {
    
    8,5,4,2,7,1};
	mergeSort(a,0,5);
	for(int i = 0;i < 6;i++){
    
    
		cout << a[i] << " ";
	}
	
}

void mergeSort(int a[],int left,int right){
    
    
	if(left<right){
    
    
		int mid = (left + right)/2;
		mergeSort(a,left,mid);
		mergeSort(a,mid+1,right);
		merge(a,left,mid,right);
	}
}
void merge(int a[],int left,int mid,int right){
    
    
	int length1 = mid-left+1;
	int length2 = right-mid;
	int *l = new int[length1];
	int *r = new int[length2];
	for(int i = left;i <= mid;i++){
    
    
		l[i-left] = a[i];
	}
	for(int j = mid+1;j <= right;j++){
    
    
		r[j-mid-1] = a[j];
	}
	int i = 0;
	int j = 0;
	int k = left;
	while(i < length1 && j < length2){
    
    
		if(l[i] < r[j]){
    
    
			a[k++] = l[i++];
		}else{
    
    
			a[k++] = r[j++];
		}
	}
	while(j < length2){
    
    
		a[k++] = r[j++];
	}
	while(i < length1){
    
    
		a[k++] = l[i++];
	}
	delete []l;
	delete []r;
}

猜你喜欢

转载自blog.csdn.net/qq_41454682/article/details/107484542