void merge(int* arr, int left, int mid, int right){
int n1 = mid - left + 1;//số lượng phần tử của mảng trái
int n2 = right - mid; // số lượng phần tử của mảng phải
int tmp1[n1], tmp2[n2];
int i = 0, j = mid + 1;
while(i < n1){
tmp1[i] = arr[i];
i++;
}
i = 0;
while(i < n2){
tmp2[i] = arr[j + i];
i++;
}
i = 0, j = 0;
int count = 0;//số lượng phần tử của mảng chính
while(i < n1 && j < n2){
if(tmp1[i] > tmp2[j]){
arr[count] = tmp2[j];
j++;
}
else{
arr[count] = tmp1[i];
i++;
}
count++;
}
while(i < n1){
arr[count] = tmp1[i];
i++;
count++;
}
while( j < n2){
arr[count] = tmp2[j];
j++;
count++;
}
}
void mergesort(int* arr, int left, int right){
int mid = (left + right) / 2;
if(left < right){
mergesort(arr, left, mid);
mergesort(arr, mid + 1, right);
merge(arr, left, mid, left);
}
}
đây là code Merge sort. Các anh có thể fix dùm em lỗi không ví dụ arr[5] = {2, 1, 5, 4, 3}; chạy trên ubuntu thì vẫn trả về 2 1 5 4 3 còn qua windows chạy visual debug thì nó nói mảng tmp1, tmp2 không có số phần tử xác định? không biết code em có sai gì không mong đc sự giúp đỡ!
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?