gpt4 book ai didi

c - 合并排序 - 代码中的错误

转载 作者:行者123 更新时间:2023-11-30 19:23:58 25 4
gpt4 key购买 nike

我编写了一段简短的代码来接收数组并对其进行排序。这是我第一次,我有很多错误 - 如果可以的话请向我解释如何解决以及我的错误在哪里/什么......我想做的就是对数组进行排序并在排序后打印它。

#include <stdio.h>

int merge_sort(int *a,int first, int last)
{
int middle;
if(first < last)
{
middle=(first+last)/2;
merge_sort(a,first,middle);
merge_sort(a,middle+1,last);
merge(a,first,middle,last);
{
}

void main()
{
int x[] = {1, 2, 3, 1, 3, 0, 6};
int xsize= (sizeof x / sizeof x[0])
merge_sort(x, 0, sizeof x / sizeof x[0]);

for (int i = 0; i < xsize; i++) { printf("%d ", x[i]); } putchar('\n');
}

最佳答案

我可以在您的程序中看到多个错误

  1. int xsize= (sizeof x / sizeof x[0])必须有分号 ;在最后。
  2. for(int i=0;i<xsize;printf("%d ",x[i]), i++);不是打印数组元素的方法。
  3. 您的merge()缺失 - merge(a,first,middle,last);

所以我继续编写了这个示例 mergesort供你引用。希望这有帮助!!

#include <stdio.h>

/*

NOTE:
The mergesort boils downs to this..
Given two sorted array's how do we merge this?

We need a new array to hold the result of merging
otherwise it is not possible to do it using array,
so we may need a linked list

*/

void merge(int a[], int i, int j)
{
int mid = (i+j)/2;
int ai = i;
int bi = mid+1;

int newa[j-i+1], newai = 0;

while(ai <= mid && bi <= j) {
if (a[ai] > a[bi])
newa[newai++] = a[bi++];
else
newa[newai++] = a[ai++];
}

while(ai <= mid) {
newa[newai++] = a[ai++];
}

while(bi <= j) {
newa[newai++] = a[bi++];
}

for (ai = 0; ai < (j-i+1) ; ai++)
a[i+ai] = newa[ai];

}

void mergesort(int a[], int i, int j)
{
int mid = (i+j) / 2;

if (i >= j) return;

mergesort(a, i, mid);
mergesort(a, mid+1, j);
merge(a, i, j);
return;
}

int main()
{
//int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int a[] = {9, 7, 2, 3, 5, 4, 1, 8, 6, 10};
int i;

mergesort(a, 0, 9);

for (i = 0; i < 10; i++)
printf ("%d ", a[i]);

printf ("\n");

return 0;
}

关于c - 合并排序 - 代码中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8718158/

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