我想对数组进行排序。 所以我写了这个合并排序,它没有做我想要它,即排序,只是摊位! 我一次又一次地审阅算法,我觉得这是正确的,但不是! 请看一看并告诉我可能出现的问题。
void mergeSort(int *arr, int low, int high){
int mid = (low+high)/2;
while(low<high){
mergeSort(arr, low, mid);
mergeSort(arr, mid+1, high);
merge(arr, low, high, mid);
}
}
void merge(int *arr,int low, int high, int mid){
int i =low,j=mid+1,k=0;
int temp[50]; // should i new/malloc this with size of ( high -low +1) ?
while(i<=mid && j<=high){
if(arr[i]<arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while(i<=mid)
temp[k++] = arr[i++];
while(j<=high)
temp[k++] = arr[j++];
for(int x = 0; x<=high; x++){
arr[x]=temp[x];
}
}
答案 0 :(得分:3)
void mergeSort(int *arr, int low, int high){
int mid = (low+high)/2;
while(low<high){
如果完全输入循环,那么它是一个无限循环,因为low
和high
都没有改变。
mergeSort(arr, low, mid);
mergeSort(arr, mid+1, high);
merge(arr, low, high, mid);
}
}
void merge(int *arr,int low, int high, int mid){
int i =low,j=mid+1,k=0;
int temp[50]; // should i new/malloc this with size of ( high -low +1) ?
是的,你一定要分配正确的存储空间。
while(i<=mid && j<=high){
if(arr[i]<arr[j])
最好arr[i] <= arr[j]
有一个稳定的排序,但这与int
无关。
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while(i<=mid)
temp[k++] = arr[i++];
while(j<=high)
temp[k++] = arr[j++];
for(int x = 0; x<=high; x++){
那应该是for(int x = low; ...
。
arr[x]=temp[x];
arr[x] = temp[x-low];
(或使用两个索引)。
}
}