gpt4 book ai didi

c - Mergesort,使用for循环做合并

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:04 24 4
gpt4 key购买 nike

我正在尝试在合并函数中使用 for 循环为 mergesort 编写 C 代码。不幸的是它不工作。在 main 函数中,我按降序在 10 个 int 上创建了一个 array,然后调用 mergesort 函数来对它们进行排序。合并函数中显然存在错误,因为从未实现升序,并且在某些数组大小中一些长数字侵入。我究竟做错了什么?这是函数:

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


void mergesort(int array[], int left, int right);

int main()
{
int i;
int arr[10];
for(i=10;i>0;i--){
arr[10-i]=i;
}
for(i=0;i<10;i++){
printf("arr[%d] = %d\n",i,arr[i]);
}
mergesort(arr,0,9);
puts("\n");
for(i=0;i<10;i++){
printf("arr[%d] = %d\n",i,arr[i]);
}
return 0;
}

void mergesort(int array[], int left, int right)
{
void merge(int array[],int left, int mid, int right);
int mid;
if(left<right){
mid=(left+right)/2;
mergesort(array,left,mid);
mergesort(array,mid+1,right);
merge(array,left,mid,right);
}
}

void merge(int array[], int left, int mid, int right)
{
int i;
int l=0;
int r=mid+1;
int arr_sorted[10];

for(i=0;i<=right;i++){
if((l<=mid) && (r<=right)){
if(array[l]<array[r]){
arr_sorted[i]=array[l];
l++;
}
else {
arr_sorted[i]=array[r];
r++;
}
}
if(l>mid){
arr_sorted[i]=array[r];
r++;
}
if(r>right){
arr_sorted[i]=array[l];
l++;
}
}
for(i=0;i<=right;i++){
array[i]=arr_sorted[i];
}
}

最佳答案

首先看起来很奇怪的是为什么您将 left 参数传递给 merge,但从 0 迭代到 right; left 甚至没有在此函数中使用。

关于c - Mergesort,使用for循环做合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com