//*****************************快速排序(递归)****************************
//递归思想:单趟来说,begin找比key大的,end找比key小的,当各自都找到的时候,
// 若begin比end小,则交换两个数据,然后继续找,当再找到的时候,如果
// begin比end大,则比较a[begin]和key的值,若a[begin]大于key,说明
// a[begin]的位置应该是key的位置,则交换,然后以key左边和右边分别进
// 行相同操作,否则,key的位置不变
int
PartSort(
int
*
a
,
int
left
,
int
right
)
{
int
key =
a
[
right
];
int
begin =
left
;
int
end =
right
- 1;
while
(begin < end)
{
while
(begin < end&&
a
[begin] <= key)
++begin;
while
(begin < end&&
a
[end] >= key)
--end;
if
(begin < end)
{
swap(
a
[begin],
a
[end]);
}
}
if
(
a
[begin]>
a
[
right
])
{
swap(
a
[begin],
a
[
right
]);
return
begin;
}
else
return
right
;
}
void
QuickSort(
int
*
a
,
int
left
,
int
right
)
{
assert
(
a
);
if
(
left
>=
right
)
return
;
int
mid = PartSort(
a
,
left
,
right
);
QuickSort(
a
,
left
, mid - 1);
QuickSort(
a
, mid + 1,
right
);
}
void
QuickSortTest()
{
//int arr[] = { 2, 0, 4, 9, 3, 6, 8, 7, 1, 5 };
int
arr[] = { 2, 5, 4, 9, 3, 5, 8, 7, 1, 5 };
int
_size =
sizeof
(arr) /
sizeof
(arr[0]);
QuickSort(arr, 0, _size - 1);
Print(arr, _size);
}