我正在尝试快速排序。但我有一些问题。它应该改变这个数组:
{ 1,9,8,7,6,5,4,3,2,10 }
当它收到参数left = 0, right = 4 and pivotIndex = 2
时,对此:
{ 7,6,1,8,9,5,4,3,2,10 }
但实际上它正在将数组改为这个:
{ 1,6,7,8,9,5,4,3,2,10 }
如果我尝试对这个数组进行分区,我也会遇到这个问题:
{ 7,6,1,8,9,5,4,3,2,10 }
带参数right = 9, left = 4 and pivotIndex = 2
的到这个数组:
{ 7,6,1,8,9,2,3,5,4,10 }
我实际上正在改变这个数组:
{ 7,6,1,8,9,2,3,10,5,4 }
代码:
int QS::partition(int left, int right, int pivotIndex)
{
if (my_array == NULL)
return -1;
if (elements <= 0 || capacity <= 0)
return -1;
if (left < 0 || right < 0)
return -1;
else if (right - left <= 1)
return -1;
if (right > elements - 1)
return -1;
if (!(pivotIndex <= right) || !(pivotIndex >= left))
return -1;
int first = pivotIndex;
int last;
if (first == right)
last = left;
else
last = right;
int up = first + 1;
int down = last - 1;
do{
while (!(up != last - 1) || !(my_array[up] <= my_array[first]))
up++;
while (!(my_array[down] > my_array[first]) || !(down != first))
down--;
if (up < down)
swap(up, down);
} while (up < down);
swap(first, down);
return down;
}
有人告诉我使用这个算法:
但我无法使用这个算法,我得到的结果最接近我得到的结果,是我给你们看的代码。
任何人都可以帮助我吗?谢谢。