快速排序的递归写法
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]
[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]
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C#递归算法之快速排序
- C++快速排序的分析与优化详解
- php快速排序原理与实现方法分析
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- 逐步讲解快速排序算法及C#版的实现示例
- C#使用委托实现的快速排序算法实例