#include <iostream>
using namespace std;
void merge(int a[], int low, int mid, int high){
int BSize = mid - low;
int CSize = high - mid;
int* A = a + low;
int* B = new int[BSize];
for(int i=0; i<BSize; ++i){
B[i] = A[i];
}
int* C = a + mid;
int i = 0, j = 0, k = 0;
while(j<BSize && k<CSize){
if(B[j]<C[k])//谁小就将谁放入A中
A[i++] = B[j++];
else
A[i++] = C[k++];
}
//将剩余的全部添加到A中
if(j==BSize){
for(; k<CSize; ++k){
A[i++] = C[k++];
}
}
else{
for(; j<BSize; ++j){
A[i++] = B[j++];
}
}
delete[] B;
}
void mergeSort(int a[], int low, int high){
//归并排序,求数组a[low, high)的升序
int size = high - low;
if(size==1){
return;//只有一个元素,直接返回
}
int mid = (high+low)/2;
mergeSort(a, low, mid);//递归求a[low, mid)排序
mergeSort(a, mid, high);//递归求a[mid, high)排序
merge(a, low, mid, high);//归并
}
int main(){
int a[6] = {5, 3, 1, 10, 6, -1};
mergeSort(a, 0, 6);
for(int i=0; i<6; ++i){
cout << a[i] << endl;
}
return 0;
}
归并排序C++
猜你喜欢
转载自blog.csdn.net/vaemusicsky/article/details/81349950
今日推荐
周排行