void mergeSort(int* arr, int left, int right) {
if (right-left <= 1)
return ;
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid, right);
merge(arr,left,mid,right);
}
void merge(int* arr,int left,int mid,int right) {
int i = left, j = mid;
int *temp=(int*)malloc((right-left)*4);
int k=0;
while (i < mid && j < right ) {
if (arr[i] < arr[j]) {
temp[k] = arr[i];
k++;
i++;
}else{
temp[k] = arr[j];
k++;
j++;
}
}
while (i < mid) {
temp[k] = arr[i];
k++;
i++;
}
while (j < right+1) {
temp[k] = arr[j];
k++;
j++;
}
for (int i = 0; i < k; i++) {
arr[left+i] = temp[i];
}
free(temp);
}
- 复杂度
最坏情况时间复杂度,最好情况时间复杂度:O(n),平均时间复杂度:O(nlog2n)
空间复杂度:O(n)
#include<stdio.h>
#include<stdlib.h>
int main() {
int* arr1= (int*)malloc(4*4);
arr1[0] = 10;
arr1[1] = 9;
arr1[2] = 8;
arr1[2] = 7;
mergeSort(arr1, 0, 4);
printA(arr1, 4);
return 0;
}
void mergeSort(int* arr, int left, int right) {
if (right-left <= 1)
return ;
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid, right);
merge(arr,left,mid,right);
}
void merge(int* arr,int left,int mid,int right) {
int i = left, j = mid;
int *temp=(int*)malloc((right-left)*4);
int k=0;
while (i < mid && j < right ) {
if (arr[i] < arr[j]) {
temp[k] = arr[i];
k++;
i++;
}else{
temp[k] = arr[j];
k++;
j++;
}
}
while (i < mid) {
temp[k] = arr[i];
k++;
i++;
}
while (j < right+1) {
temp[k] = arr[j];
k++;
j++;
}
for (int i = 0; i < k; i++) {
arr[left+i] = temp[i];
}
free(temp);
}