C语言中的快速排序,带有霍尔分区 #包括 #包括 #包括 int w,q,p,r; int tab[100]; 空干管() { int i; srand(时间(0)); 对于(i=0;i代码> j>代码>两个方向。但是,你把它们都减去了。你试过使用调试器吗?这是家庭作业吗?如果不是,考虑使用标准的C函数 qSoTo()/代码>。BTW,如果你把你的代码格式化好,比如拼写错误,那就好了: QuassSnRoT < /代码>:是否尝试使用调试器?这是作业吗?如果不是,考虑使用标准的C函数 qSoTo()>代码> .BTW,如果您的代码比错误拼写格式好,那就好了: QuassSnRoT < /代码>:很抱歉,其中一个名称可能被命名为分区,但我错误地将其更改为quicksnort。我只是在这里发布它时才这样做,因此当正确地更改为分区时,它并不能解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想重命名它)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtoolinstalld、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。好的,你应该已经有了dbx。也可以查看gdb,或者mdb,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?很抱歉,其中一个错误被命名为partition,但我错误地将其更改为quicksnort。我只是在这里发布时才这样做的,所以什么时候开始如果正确地将其命名为分区,则无法解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想将其重命名)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtoolinstalld、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。你应该已经有了dbx。也可以查看gdb,或者mdb,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?我正在研究你的解决方案。但说实话,我没有 #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); }
在调试器中运行它,然后查看。使用C语言中的快速排序,带有霍尔分区 #包括 #包括 #包括 int w,q,p,r; int tab[100]; 空干管() { int i; srand(时间(0)); 对于(i=0;i代码> j>代码>两个方向。但是,你把它们都减去了。你试过使用调试器吗?这是家庭作业吗?如果不是,考虑使用标准的C函数 qSoTo()/代码>。BTW,如果你把你的代码格式化好,比如拼写错误,那就好了: QuassSnRoT < /代码>:是否尝试使用调试器?这是作业吗?如果不是,考虑使用标准的C函数 qSoTo()>代码> .BTW,如果您的代码比错误拼写格式好,那就好了: QuassSnRoT < /代码>:很抱歉,其中一个名称可能被命名为分区,但我错误地将其更改为quicksnort。我只是在这里发布它时才这样做,因此当正确地更改为分区时,它并不能解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想重命名它)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtoolinstalld、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。好的,你应该已经有了dbx。也可以查看gdb,或者mdb,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?很抱歉,其中一个错误被命名为partition,但我错误地将其更改为quicksnort。我只是在这里发布时才这样做的,所以什么时候开始如果正确地将其命名为分区,则无法解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想将其重命名)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtoolinstalld、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。你应该已经有了dbx。也可以查看gdb,或者mdb,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?我正在研究你的解决方案。但说实话,我没有 #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); },c,algorithm,quicksort,C,Algorithm,Quicksort,在调试器中运行它,然后查看。使用cc-g进行编译,使其与调试器兼容。Googledbx cheatsheet学习基本命令。学习基本调试器的使用和隔离错误所需的时间比编写帖子所需的时间要少,这就是为什么它是一个很好的学习工具 在调试器中运行它并查看。使用cc-g进行编译,使其与调试器兼容。使用Googledbx cheatsheet学习基本命令。学习基本调试器的使用和隔离错误所需的时间将少于编写帖子所需的时间,这就是为什么它是一个投入时间学习的好工具。您的代码中有一些错误 p、 r,q在使用它们之
cc-g
进行编译,使其与调试器兼容。Googledbx cheatsheet
学习基本命令。学习基本调试器的使用和隔离错误所需的时间比编写帖子所需的时间要少,这就是为什么它是一个很好的学习工具 在调试器中运行它并查看。使用cc-g
进行编译,使其与调试器兼容。使用Googledbx cheatsheet
学习基本命令。学习基本调试器的使用和隔离错误所需的时间将少于编写帖子所需的时间,这就是为什么它是一个投入时间学习的好工具。您的代码中有一些错误
p、 r,q在使用它们之前没有定义
我很惊讶编译时没有收到任何警告
我认为现在发生的事情是,由于无效值(p、r、q…等),您正在无限递归,并且您的操作系统最终耗尽了内存,无法提供您的程序
此外,请将代码的格式设置得更好,以便于阅读。对每个子条款或语句使用嵌套结构和8个空格或制表符。代码中有一些错误 p、 r,q在使用它们之前没有定义 我很惊讶编译时没有收到任何警告 我认为现在发生的事情是,由于无效值(p、r、q…等),您正在无限递归,并且您的操作系统最终耗尽了内存,无法提供您的程序
另外,请将代码的格式设置得更好,以便于阅读。对每个子条款或语句使用嵌套结构和8个空格或制表符。我认为
分区中设置I
的循环将其递减,而不是递增
你想把i
和j
向相反的方向移动,但是你要把它们都减量。我认为分区中设置i
的循环会将其减量而不是增加
你想移动代码< > <代码> >代码> j>代码>两个方向。但是,你把它们都减去了。你试过使用调试器吗?这是家庭作业吗?如果不是,考虑使用标准的C函数<代码> qSoTo()/代码>。BTW,如果你把你的代码格式化好,比如拼写错误,那就好了:<代码> QuassSnRoT < /代码>:是否尝试使用调试器?这是作业吗?如果不是,考虑使用标准的C函数<代码> qSoTo()>代码> .BTW,如果您的代码比错误拼写格式好,那就好了:<代码> QuassSnRoT < /代码>:很抱歉,其中一个名称可能被命名为分区,但我错误地将其更改为quicksnort。我只是在这里发布它时才这样做,因此当正确地更改为分区时,它并不能解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想重命名它)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtool
installd、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。好的,你应该已经有了dbx
。也可以查看gdb
,或者mdb
,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?很抱歉,其中一个错误被命名为partition,但我错误地将其更改为quicksnort。我只是在这里发布时才这样做的,所以什么时候开始如果正确地将其命名为分区,则无法解决问题。(我这样做是因为我最初是用另一种语言命名的,为了让您放心,我想将其重命名)。但是,问题仍然存在。是的,很抱歉,我应该意识到这一点。我编辑了我的答案。请确保所有变量在使用之前都已初始化。我确信这是由于内存不足而导致的核心转储。此外,如果您需要带GUI的调试器,并且您在Unix/Solaris计算机上,请查看是否安装了dbxtool
installd、 如果您想下载它,Solaris/Sun Studio会附带它。这意味着给它们诸如“int p=0;”之类的值吗?因为我对所有变量都这样做了,问题仍然是一样的。此外,调试器正在进行中。我使用的是xubuntu linux。不幸的是,这将花费我大约永远的时间(这意味着如果我全速运行,大约需要6个小时),下载Sun Studio,因为我的internet连接速度相对较慢。因此,如果您有一些较小的调试器可供推荐,那就太好了,否则我将不得不等待(或者奇迹般地,我会在我的计算机上找到调试器)。你应该已经有了dbx
。也可以查看gdb
,或者mdb
,这取决于你需要它做什么。当程序崩溃时,你得到的确切错误消息是什么?我正在研究你的解决方案。但说实话,我没有
#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);
}