首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何小弟我的快速排序是死循环啊谢谢

2012-03-28 
为何我的快速排序是死循环啊,多谢#includestdio.h#includestdlib.hvoidFunc(intiArray[],int,int)int

为何我的快速排序是死循环啊,多谢
#include   <stdio.h>
#include   <stdlib.h>
void   Func(int   iArray[],   int,   int);

int   main()
{
int   a[8]   =   {8,   7,   6,   5,   4,   3,   2,   1};
Func(a,   0,   7);
int   k;
for(k   =   0;   k   !=   8;   k   ++)
{
printf( "%2d ",   a[k]);
}
return   0;
}

void   Func(int   iArray[],   int   left,   int   right)
{
int   i,   j;
i   =   left,   j   =   right;
int   iRef   =   iArray[left];
while(i   !=   j)
{
while(iArray[j]   >   iRef   &&   j   >   i)
j   --;
if(iArray[j]   <   iRef)
{
int   temp;
temp   =   iArray[i];
iArray[i]   =   iArray[j];
iArray[j]   =   temp;
}
while(iArray[i]   <   iRef   &&   j   >   i)
i   ++;
if(iArray[i]   >   iRef)
{
int   temp;
temp   =   iArray[i];
iArray[i]   =   iArray[j];
iArray[j]   =   temp;
}
}
iArray[i]   =   iRef;
Func(iArray,   left,   i   -   1);
Func(iArray,   i   +   1,   right);
}

[解决办法]
if(iArray[i] > iRef)
{
int temp;
temp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = temp;
}

显然不应该有两个这个过程 ~
while(iArray[j] > iRef && j > i)
j --;
while(iArray[i] < iRef && j > i)
i ++;
然后对换 iArray[i] 和 iArray[j] 即可 ~
【注意第一个元素的处理】

热点排行