关于快速排序的问题,请高手指教
快速排序执行之后,结果出错。
代码:
#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;
}