C-归并排序用C语言实现出错

发布于 2017-01-18 06:09:31 字数 1679 浏览 1143 评论 1

用C写的归并排序,排序的结果出错,没看出问题出在哪儿,求教

#include <stdio.h>
#include <stdlib.h>
#include "sort.h"

void merge(int array[], unsigned int low, unsigned int mid, unsigned int high) {
int *temp = (int *)malloc((high - low + 1) * sizeof(int));
int begin1 = low;
int end1 = mid;
int begin2 = mid + 1;
int end2 = high;
int k,i;

for(k=0;begin1 <= end1 && begin2 <= end2; k++) {
if(array[begin1] < array[begin2]) {
temp[k] = array[begin1++];
} else {
temp[k] = array[begin2++];
}
}

while(begin1 <= end1) {
temp[k++] = array[begin1++];
}
while(begin2 <= end2) {
temp[k++] = array[begin2++];
}
for(i=0;i<=(high - low + 1);i++){
array[low+i] = temp[i];
}
free(temp);
output(array, high - low + 1);
}

void mergesort(int array[], unsigned int low, unsigned int high) {
int mid = 0;
if(low < high) {
mid = (low + high) / 2;
mergesort(array, low, mid);
mergesort(array, mid + 1, high);
merge(array, low, mid, high);
//printf("[%d %d],[%d, %d]n", array[low], array[mid], array[mid + 1], array[high]);
//output(array, high - low + 1);
}
}

void main() {
//int ar[10] = {0,1,2,3,4,5,6,7,8,9}, i;
int ar[10] = {3,0,9,1,4,7,6,2,5,8};
//int ar[10] = {0,3,5,7,9,1,2,4,6,8};
mergesort(ar, 0, 9);
//output(ar, 10);
//merge(ar, 0, 4, 9);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虐人心 2017-03-13 11:45:09

27行应该为for(i = 0; i < high - low + 1; ++i)不然会操作越界

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文