您的位置:首页 > 产品设计 > UI/UE

quick_sort.cc

2012-10-29 22:04 225 查看
//只是随手写写,非递归版的快排
#include <iostream>
#include <stack>

using namespace std;
using std::stack;

struct Node
{
int begin, end;
};

int partition(int *a, int begin, int end)
{
int p = a[end];
int pos = begin;

for(int i = begin; i < end; i++)
{
if(a[i] <= p)
{
swap(a[i], a[pos]);
pos++;
}
}
swap(a[end], a[pos]);
return pos;
}

void quick_sort(int *a, int begin, int end)
{
if(end <= begin)
return;

int pivot = partition(a, begin, end);
quick_sort(a, begin, pivot - 1);
quick_sort(a, pivot + 1, end);
}

void quick_sort_not_recursive(int *a, int begin, int end)
{
stack<Node> pos;
Node node;
int pivot;

node.begin = begin;
node.end = end;
pos.push(node);

while(!pos.empty())
{
Node tmp_node = pos.top();
pos.pop();

pivot = partition(a, tmp_node.begin, tmp_node.end);
if(pivot -1 > tmp_node.begin)
{
node.begin = tmp_node.begin;
node.end = pivot - 1;
pos.push(node);
}
if(pivot + 1 < tmp_node.end)
{
node.begin = pivot + 1;
node.end = tmp_node.end;
pos.push(node);
}
}

}

int main()
{
int a[] = {1, 2, 3, 5, 10, 4, 6, 7, 7, 2};
//int a[] = {1, 2, 7, 7, 2};
int len = sizeof(a) / sizeof(a[0]);

//quick_sort(a, 0, len - 1);

for(int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
cout << endl;

quick_sort_not_recursive(a, 0, len - 1);

for(int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
cout << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: