void QuickSortCore(int* data, int first, int last);
int partition(int* data, int first, int last);
void QuickSort(int* data, int length)
{
if(data == NULL || length <= 0) return;
QuickSortCore(data, 0, length-1);
}
void QuickSortCore(int *data, int first, int last)
{
if(first < last)
{
stack<int> stk;
int pivot;
pivot = partition(data, first, last);
if(first < pivot-1)
{
stk.push(first);
stk.push(pivot-1);
}
if(pivot+1 < last)
{
stk.push(pivot+1);
stk.push(last);
}
while(!stk.empty())
{
last = stk.top();
stk.pop();
first = stk.top();
stk.pop();
pivot = partition(data, first, last);
if(first < pivot-1)
{
stk.push(first);
stk.push(pivot-1);
}
if(pivot+1 < last)
{
stk.push(pivot+1);
stk.push(last);
}
}
}
}
int partition(int* data, int first, int last)
{
//使用两个指针分别向前后遍历
int pivot = data[first];
while(first < last)
{
while(first < last && data[last] >= pivot)
last--;
data[first] = data[last];
while(first < last && data[first] <= pivot)
first++;
data[last] = data[first];
}
data[first] = pivot;
return first;
}
数组的快速排序(使用栈的非递归实现)
最新推荐文章于 2021-11-27 22:22:09 发布