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;
}