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

关于快速排序的有关问题,请高手指教

2012-02-07 
关于快速排序的问题,请高手指教快速排序执行之后,结果出错。代码:#includeiostream.hvoidprint(intarr[],

关于快速排序的问题,请高手指教
快速排序执行之后,结果出错。

代码:
#include   <iostream.h>


void   print(int   arr[]   ,   int   n)
{
for   (   int   i=0   ;   i <n   ;   i++   )
{
cout < <arr[i] < < '\t ';
}
cout < <endl < <endl;
}


int   partition(   int   arr[],   int   first,   int   last   )
{
int   temp   =   arr[first];
int   i   =   first   +1;
int   j   =   last;

while   (   i   <   j   )
{
while   (   i <j   &&   arr[i] <temp   )
{
i++;
}
while   (   i <j   &&   arr[j]> temp   )
{
j--;
}

if   (   i   <   j   )
{
int   swaptemp   =   arr[i];
arr[i]   =   arr[j];
arr[j]   =   swaptemp;

//   i++;
j--;
}
}

arr[first]   =   arr[j];
arr[j]   =   temp;

return   j;
}


void   sort(   int   arr[],   int   first,   int   last   )
{
int   location;
if   (   first   <   last   )
{
location   =   partition(   arr,   first,   last   );

sort(   arr,   first,   location-1   );
sort(   arr,   location+1,   last   );
}
}


void   main()
{
int   array[7]   =   {     67,   33,12,   21,   50,   49,   75   };

sort(array,   0,   6);

print(array,   7);
}


结果:
12             21             33             50             49             75             67

Press   any   key   to   continue

[解决办法]
好像楼上的程序还是不对,还应该在修改一下partition 函数

更改如下:
int partition(int arr[], int first, int last)
{
int temp = arr[first];
int i = first +1;
int j = last;

while(i <j)
{
while(i <j && arr[i] <=temp )
i++
while (i <j && arr[j]> =temp )
j--;

if (i <j)
{
int swaptemp = arr[i];
arr[i] = arr[j];
arr[j] = swaptemp;
i++;
j--;
}
}
if(arr[first] > arr[j])
{
arr[first] = arr[j];
arr[j] = temp;
}

return j;
}

热点排行