c语言求大神解释下,小弟实在搞不懂,快速排序错误

#include<stdio.h>
#define N 10
void qsort_(int a[],int left,int right);
int main(void)
{
int a[N]={6,3,1,2,5,9,8,6,7,6};
int i;
qsort_(a,0,N-1);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}
void qsort_(int a[],int left,int right)
{
int i,j,t,temp;
i=left;
j=right;
if(i>j)
return;
temp=a[left];
while(i!=j)
{
while(a[j]>=temp&&i<j)
j--;
while(a[i]<=temp&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
qsort_(a,0,i-1);
qsort_(a,i+1,N-1);
}
调试错误为:Program received signal SIGSEGV, Segmentation fault.
0x0000000000400627 in qsort_ (
a=<error reading variable: Cannot access memory at address 0x7fffff7feff8>,
left=<error reading variable: Cannot access memory at address 0x7fffff7feff4>,
right=<error reading variable: Cannot access memory at address 0x7fffff7feff0>)
at 4.c:16
16 {

第1个回答  2014-04-25
你的程序有点复杂,可以简单点的,如下:

#include<stdio.h>
#define N 10
void qsort(int a[],int N); \\不用下划线
int main(void)
{
int a[N]={6,3,1,2,5,9,8,6,7,6};
int i;
qsort(a,N);
for(i=0;i<10;i++)
printf("%d,",a[i]); \\输出最后有间隔,不然会连在一起的,这里用逗号隔开
printf("\n");
return 0;
}
void qsort(int a[],int N) \\这里采用的思路是,从第一个开始,历遍全部,将最小的放在第一位,然后从第二个开始,历遍余下的,将次小的放在第二位,依此类推,即可。
{
int i,j,t;
for(i=0;i<N;i++)
{
t=a[i];

for(j=i+1;j<N;j++)
if(a[j]<t)
{
t=a[j];
a[j]=a[i];
a[i]=t;
}

}

}追问

大哥,看清,快速排序法

本回答被提问者采纳