#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 中是如何工作的。
(好吧,我知道它们指向单元格之类的东西,但是我迷失了带有指针的指针,或函数中使用的指针,或函数指针表等。老实说,我不知道在哪里以获取有关此的更具体信息)
但也许解决方案比这更简单。