// 快速排序_非递归.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
using namespace std;
int myArray[] = {3,0,6,1,11,7,2,12,4,10,9,5,8};
void printArray(int *Array, int len)
{
for (int idx = 0; idx < len; idx++)
{
printf("%d ", Array[idx]);
}
printf("\r\n");
}
int partition(int *s, int l, int r)
{
int i = l, j = r;
int x = s[l]; //s[l]即s[i]就是第一个坑
while (i < j)
{
// 从右向左找小于x的数来填s[i]
while(i < j && s[j] >= x)
j--;
if(i < j)
{
s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
i++;
}
// 从左向右找大于或等于x的数来填s[j]
while(i < j && s[i] < x)
i++;
if(i < j)
{
s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
j--;
}
}
//退出时,i等于j。将x填到这个坑中。
s[i] = x;
return i;
}
void QuickSort(int *Array, int startPos, int endPos)
{
std::vector<int> vector;
int p, q, r;
r = partition(Array, startPos, endPos);
p = startPos;
q = r-1;
vector.push_back(r+1);
vector.push_back(endPos);
while (p < q || vector.size() > 0)
{
if (p < q)
{
r = partition(Array, p, q);
vector.push_back(r+1);
vector.push_back(q);
q = r-1;
}
else
{
q = vector.back();
vector.pop_back();
p = vector.back();
vector.pop_back();
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int len = sizeof(myArray)/sizeof(myArray[0]);
printArray(myArray, len);
QuickSort(myArray, 0, len-1);
printArray(myArray, len);
return 0;
}
快速排序(非递归算法)
最新推荐文章于 2023-11-22 22:10:53 发布