Может ли кто-нибудь сказать мне, что не так с этим кодом сортировки слиянием! Я новичок в программировании и не могу понять этого. Заранее благодарю вас!
#include <iostream> using namespace std; void merge(int arr[], int p, int q, int r){ int a = q - p + 1; int b = r - q; int left[a]; int right[b]; for(int i=0;i<a;i++){ left[i] = arr[p + i]; } for(int j=0;j<b;j++){ right[j] = arr[q + j + 1]; } int i=0; int j=0; int k=1; while(i < a && j < b){ if(left[i] <= right[j]){ arr[k] = left[i]; i++; k++; }else{ arr[k] = right[j]; j++; k++; } } while(i < a){ arr[k] = left[i]; i++; k++; } while(j < b){ arr[k] = right[j]; j++; k++; } } void mergeSort(int arr[], int p, int r){ if(p < r){ int q = p + (r-p)/2; mergeSort(arr, p, q); mergeSort(arr, q+1, r); merge(arr, p, q, r); } } int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int arr_size = sizeof(arr)/sizeof(arr[0]); printf("Given array is \n"); for(int i=0;i<arr_size;i++){ cout<<arr[i]<<" "; } mergeSort(arr, 0, arr_size - 1); printf("\nSorted array is \n"); for(int i=0;i<arr_size;i++){ cout<<arr[i]<<" "; } return 0; }
Что я уже пробовал:
Я никак не могу понять, что с ним не так.
ZurdoDev
Во - первых, скажите нам, что он должен делать. Тогда скажи нам, что он делает. Но вы должны отладить его и выяснить это.