您的位置:首页 > 其它

快速排序的递归写法

2016-07-03 20:56 330 查看
[align=left]//*****************************快速排序(递归)****************************[/align]
[align=left]//递归思想:单趟来说,begin找比key大的,end找比key小的,当各自都找到的时候,[/align]
[align=left]//          若begin比end小,则交换两个数据,然后继续找,当再找到的时候,如果[/align]
[align=left]//          begin比end大,则比较a[begin]和key的值,若a[begin]大于key,说明[/align]
[align=left]//          a[begin]的位置应该是key的位置,则交换,然后以key左边和右边分别进[/align]
[align=left]//          行相同操作,否则,key的位置不变[/align]
[align=left]
[/align]

int
PartSort(int
*a,
int
left,
int
right)
[align=left]{[/align]
                
int
key =
a
[right];
                
int
begin =
left
;
                
int
end =
right
- 1;
                
while
(begin < end)
[align=left]                {[/align]
                                
while
(begin < end&&a
[begin] <= key)
[align=left]                                                ++begin;[/align]
                                
while
(begin < end&&a
[end] >= key)
[align=left]                                                --end;[/align]
                                
if
(begin < end)
[align=left]                                {[/align]
                                                swap(
a[begin],
a
[end]);
[align=left]                                }[/align]
[align=left]                }[/align]
                
if
(a
[begin]>a[right])
[align=left]                {[/align]
                                swap(
a[begin],
a
[right]);
                                
return
begin;
[align=left]                }[/align]
                
else
                                
return
right
;
[align=left]}[/align]
[align=left]
[/align]
void
QuickSort(int
*a,
int
left,
int
right)
[align=left]{[/align]
                
assert(a
);
                
if
(left
>=
right)
                                
return;
                
int
mid = PartSort(a
,
left,
right);
[align=left]
[/align]
                QuickSort(
a,
left
, mid - 1);
                QuickSort(
a, mid + 1,
right
);
[align=left]}[/align]
[align=left]
[/align]
void
QuickSortTest()
[align=left]{[/align]
                   
//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]);
[align=left]                                QuickSort(arr, 0, _size - 1);[/align]
[align=left]                                Print(arr, _size);[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序