读书人

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

发布时间: 2012-02-07 17:45:37 作者: rapoo

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

代码:
#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;
}

读书人网 >C++

热点推荐