gpt4 book ai didi

c 快速排序不工作

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

学习 C,这是一个练习。

要求用户输入二维数组的维数。然后用户输入该数组的值。最后,程序必须能够将每一行从最低到最高排序并打印结果。

例如

输入:

2 2
13 11
13 11

应该打印:

11 13
11 13

但是我的程序正在打印:

11 13
13 11

如果在我的代码中我声明了一个固定的数组大小,比方说矩阵 [2][2] 并将所有代码更改为该数组维度,程序运行良好,但如果我声明矩阵 [MAX][MAX],因为我不知道数组的大小是多少,它给了我上面发布的输出。

这是因为我没有使用指针和内存分配吗? (请记住,我仍在学习 C)。

这是我完成的代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

/*Print the final two-dimensional array*/
void print( int a[MAX][MAX], int b[])
{
int i,j;
for (i=0; i<b[0]; i++)
{
for (j=0; j<b[1]; j++)
{
printf("%d", a[i][j]);
if (j < b[1]-1)
{
printf(" ");
}
}
printf("\n");
}
}

/* Sort my array */
int Qsort (int v[MAX][MAX], int li, int ls)
{
int j;
if (li < ls)
{
j = order(v,li, ls);
Qsort (v, li, j-1);
Qsort (v, j+1, ls);
}
return v[MAX][MAX];
}


int order(int x[], int li, int ls)
{
int a, down, up, temp;
a=x[li]; down=li; up=ls;
while (down<up)
{
while (x[down]<=a && down<ls)
down ++;
while (x[up]>a)
up --;
if (down < up)
{
temp=x[down];
x[down]=x[up];
x[up]=temp;
}
}
x[li]=x[up];
x[up]= a;
return up;
}

int main()
{
int i,j,size,jump,jump2;
int tam[2];
int matrix[MAX][MAX];

/*Define rows and columms*/
i=0;
while (i<2)
{
scanf("%d", &tam[i]);
i++;
}

/*Fill the array with the numbers the user inputs*/
for (i=0; i<tam[0]; i++)
{
for (j=0; j<tam[1]; j++)
{
scanf("%d", &matrix[i][j]);
}
}

size = tam[1];
jump = 1;
jump2 = 0;

for(i=0;i<tam[0];i++)
{
Qsort (matrix,jump2, jump*size-1);
jump++;
jump2 = jump2 + size;

}

print (matrix,tam);

return 0;
}

谢谢,

法沃拉斯

最佳答案

您似乎在一遍又一遍地对第一行进行排序。您只想将单个列传递给 Qsort,因此应声明它:

Qsort(int v[MAX], int li, int ls)

在您的主函数中,只需对每个连续的行调用 Qsort:

Qsort(matrix[i], 0, size-1);

关于c 快速排序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088762/

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