快速排序的非递归实现
2012-09-23 23:19
471 查看
#include <iostream>
#include<vector>
using namespace std;
void print_array(int array[], int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
int Partition(int array[], int low, int high)
{
int tmp = array[low];
while (low < high)
{
while(low < high && array[high] >= tmp) high--;
array[low] = array[high];
while(low < high && array[low] <= tmp) low++;
array[high] = array[low];
}
array[low] = tmp;
return low;
}
//快速排序 非递归
void Not_Recursion_QSort(int array[], int low, int high)
{
vector<int> v;
if (low < high)
{
v.push_back(low);
v.push_back(high);
}
int mid;
int tmp;
int tmp_low;
int tmp_high;
while (v.size())
{
tmp_high = v.back();
v.pop_back();
tmp_low = v.back();
v.pop_back();
tmp = Partition(array, tmp_low, tmp_high);
if (tmp-1 > tmp_low)
{
v.push_back(tmp_low);
v.push_back(tmp-1);
}
if (tmp + 1 < tmp_high)
{
v.push_back(tmp + 1);
v.push_back(tmp_high);
}
}
}
void main()
{
int array[] = {1, 14, 25, 12};
int len = 4;
Not_Recursion_QSort(array, 0, len);
print_array(array, len);
}
#include<vector>
using namespace std;
void print_array(int array[], int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
int Partition(int array[], int low, int high)
{
int tmp = array[low];
while (low < high)
{
while(low < high && array[high] >= tmp) high--;
array[low] = array[high];
while(low < high && array[low] <= tmp) low++;
array[high] = array[low];
}
array[low] = tmp;
return low;
}
//快速排序 非递归
void Not_Recursion_QSort(int array[], int low, int high)
{
vector<int> v;
if (low < high)
{
v.push_back(low);
v.push_back(high);
}
int mid;
int tmp;
int tmp_low;
int tmp_high;
while (v.size())
{
tmp_high = v.back();
v.pop_back();
tmp_low = v.back();
v.pop_back();
tmp = Partition(array, tmp_low, tmp_high);
if (tmp-1 > tmp_low)
{
v.push_back(tmp_low);
v.push_back(tmp-1);
}
if (tmp + 1 < tmp_high)
{
v.push_back(tmp + 1);
v.push_back(tmp_high);
}
}
}
void main()
{
int array[] = {1, 14, 25, 12};
int len = 4;
Not_Recursion_QSort(array, 0, len);
print_array(array, len);
}
相关文章推荐
- 快速排序3——非递归实现
- java 递归实现快速排序
- 快速排序的递归和非递归实现 -----C++、JAVA代码实现
- 用栈来实现非递归快速排序。
- php使用递归与迭代实现快速排序示例
- 快速排序的递归和非递归实现
- 快速排序的递归实现算法。
- 快速排序递归与非递归代码实现与思考
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 快速排序的递归和非递归的实现
- 快速排序的两种实现思路和非递归实现--C++实现
- 快速排序 数组+递归实现
- 笔记:快速排序的java实现,递归的实现
- C++实现快速排序,递归写法
- 快速排序的递归实现。 分治法。
- 快速排序的递归实现
- 快速排序的递归实现
- 快速排序的三种实现方式以及非递归版本
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现