【发布时间】:2012-05-25 18:28:38
【问题描述】:
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
int w, q, p, r;
int tab[100];
void main ()
{
int i;
srand(time(0));
for (i = 0; i < 100; i += 1)
{
tab[i]=rand()%100;
}
display(tab);
r = 37;
quicksnort(tab, 0, r-1);
display(tab);
}
int display (int tab[])
{
int i;
printf("\n Your numbers : \n");
for (i = 0; i < 100; i += 1)
{
printf(" %d", tab[i]);
}
}
int quicksnort(int tab[], int m, int n)
{
if (p<r)
{
q = partition(tab, m, n);
quicksnort(tab, m, q-1);
quicksnort(tab, q+1, n);
}
}
int partition(int tab[], int p, int r)
{
int x, i, j, part;
x = tab[p];
i = p-1;
j = r+1;
do
{
do
{
j = j-1;
} while (tab[j]<=x && j>=0);
do
{
i = i+1;
} while (tab[i]>=x && i<=0);
if (i<j)
{
part = tab[i];
tab[i]=tab[j];
tab[j]=part;
}
else
{
return j;
}
} while (1);
}
嗨,我对上面的代码有疑问。它会编译,但是当我运行它时,它会停止并显示某种“核心转储”警报。 它基于快速排序的 hoare 版本,确切地说是那个伪代码http://screenshooter.net/5359896/jyuogoj 我已经尽一切努力让它工作,我认为它可能与指针有关。我认为这是因为我不确定它们在 C 中是如何工作的。
(好的,我知道它们指向单元格之类的东西,但是我迷失了带有指针的指针,或函数中使用的指针,或函数指针表之类的东西。老实说,我不知道不知道在哪里可以找到更具体的信息)
但也许解决方案比这更简单。
【问题讨论】:
-
你试过在上面使用调试器吗?
-
这是作业吗?如果没有,请考虑使用标准 C 函数
qsort()。 -
顺便说一句,如果你的代码格式更好
-
我喜欢这个拼写错误:
quicksnort:)