递归实现快速排序
2009-11-10 22:05
141 查看
/*
分裂:将数组分为两部分,前一部分小于poivt,后一部分大于
*/
int CRecursion::split(int ary[], int low, int high)
{
int x = ary[low];
int i = low;
int k=0;
CLibrary m_Library;
for(k = low+1; k <= high; k++)
{
if(ary[k] < x)
{
i = i+1;
m_Library.swap(ary[k], ary[i]);
}
}
m_Library.swap(ary[low], ary[i]);
return i;
}
/*
调用split,用递归实现快速排序
*/
void CRecursion::split_sort(int ary[], int low, int high)
{
if(low < high)
{
int k = split(ary, low, high);
split_sort(ary, low, k-1);
split_sort(ary, k+1, high);
}
}
void main()
{
/////////////////////////////////////////////
//////// 递归实现快速排序 ////////////
int ary[9] = {8, 3, 6, 2, 1, 9, 4, 5, 7};
int low = 0, high = 9-1;
CRecursion m_Recursion;
m_Recursion.split_sort(ary, low, high);
for(int i = low; i <= high; i++)
cout << ary[i] << " ";
getchar();
return 0;
}
分裂:将数组分为两部分,前一部分小于poivt,后一部分大于
*/
int CRecursion::split(int ary[], int low, int high)
{
int x = ary[low];
int i = low;
int k=0;
CLibrary m_Library;
for(k = low+1; k <= high; k++)
{
if(ary[k] < x)
{
i = i+1;
m_Library.swap(ary[k], ary[i]);
}
}
m_Library.swap(ary[low], ary[i]);
return i;
}
/*
调用split,用递归实现快速排序
*/
void CRecursion::split_sort(int ary[], int low, int high)
{
if(low < high)
{
int k = split(ary, low, high);
split_sort(ary, low, k-1);
split_sort(ary, k+1, high);
}
}
void main()
{
/////////////////////////////////////////////
//////// 递归实现快速排序 ////////////
int ary[9] = {8, 3, 6, 2, 1, 9, 4, 5, 7};
int low = 0, high = 9-1;
CRecursion m_Recursion;
m_Recursion.split_sort(ary, low, high);
for(int i = low; i <= high; i++)
cout << ary[i] << " ";
getchar();
return 0;
}
相关文章推荐
- java 递归实现快速排序
- 快速排序非递归实现
- 快速排序lua实现 递归和栈两种实现
- 快速排序lua实现 递归和栈两种实现
- 笔记:快速排序的java实现,递归的实现
- 快速排序的递归实现
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序
- 快速排序的非递归实现
- C++实现快速排序,递归写法
- 快速排序的三种实现方式以及非递归版本
- Java实现快速排序递归和非递归
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 快速排序的两重递归实现
- 快速排序非递归实现
- 快速排序递归和非递归实现
- 快速排序 数组+递归实现
- 快速排序的js递归实现
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 分别使用递归和迭代实现快速排序
- [Sort]快速排序-递归实现