
归并排序算法
`c++
#include
// 归并排序
void __merge(int arr[],int l,int mid,int r) {
// int aux[r-l+1];
int *aux = new int[r-l+1];
// 复制aux数组
for (int i = l; i <= r; i++) {
aux[i-l] = arr[i];
}
// 对比下标 i,j k
int i = l,j = mid + 1;
for (int k=l;k<=r;k++) {
// 判断索引越界
if (i > mid) {
arr[k] = aux[j-l];
j++;
} else if (j > r) {
arr[k] = aux[i-l];
i++;
} else if (aux[i-l] > aux[j-l]) { // 比较两边下表索引
arr[k] = aux[j-l];
j++;
} else {
arr[k] = aux[i-l];
i++;
}
}
delete []aux;
}
void __mergeSort(int arr[],int l,int r) {
if (l >= r) {
return;
}
int mid = (l+r) / 2;
// 递归 把数组分成 单个元素
__mergeSort(arr,l,mid);
__mergeSort(arr,mid+1,r);
__merge(arr,l,mid,r);
}
void mergeSort(int arr[],int n) {
__mergeSort(arr,0,n-1);
}
int main(int argc, char const *argv[]) {
int arr[] = {3,5,2};
mergeSort(arr,3);
for (int i=0; i<3; i++) {
printf("%dn",arr[i]);
}
return 0;
}




近期评论