快排模板

//非递归版
void QuickSortNotR(int* array,int left,int right)
{
	assert(array);
	stack s;
	s.push(left);
	s.push(right);//后入的right,所以要先拿right
	while(!s.empty)//栈不为空
	{
		int right = s.top();
		s.pop();
		int left = s.top();
		s.pop();
		
		int index = PartSort(array,left,right);
		if((index - 1) > left)//左子序列
		{
			s.push(left);
			s.push(index - 1);
		}
		if((index + 1) < right)//右子序列
		{
			s.push(index + 1);
			s.push(right);
		}
	}
}
///快排模板,我的那种真的简单额。
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
#include
using namespace std;
int Partition(int a[], int left, int right)///7行代码
{
        int i = left-1;///初始化一定要赋值好。
        for(int j=left;j<=right-1;j++){
                if(a[j] < a[right]){///把right这个作为轴了。
                        i++;///这个i坐标左边的值就是比a[right]小的。
                        swap(a[i], a[j]);///必须交换一下。
                }
        }
        swap(a[i+1], a[right]);///最后把i+1和right交换,这样轴就是i+1了必须是保证i+1上当初就是作为标杆的a[right]啊。
        return i+1;
}
void Qsort(int a[], int left, int right)
{
        if(left

你可能感兴趣的:(排序与检索)