快速排序非递归算法

#define MaxN 1000
typedef int keytype;
void QUICKSORT(keytype K[],int n){

	int i,j,left,right,pos=-1;
	int buf[MaxN][2];//数组buf用以保存下一趟快拍的起始和末尾位置
	keytype temp;
	while(1){/*K[left]为分界元素*/
		i = left;
		j = right;
		while(1){ //每一次排序从这里开始
			do i++; while(i!= right && K[i]<K[left]);
			do j--; while(j!= left && K[j]>K[left]);
			if (i<j)
			{
				temp = K[i];
				K[i] = K[j];
				K[j] = temp; //以上三条交换K[i]与K[j]的内容
			}else{
				break;
			}
		}
		temp = K[left];
		K[left] = K[i];
		K[i] = temp; //交换K[left]与K[i]的内容
		if (j+1>=right && j-1<=left)//被分成两部分都不足两个元素
		{
			if (pos == -1)
			{
				break; //保存排序首,尾位置的数组为空,排序结束
			}
			left = buf[pos][0];//获取新的排序范围的起始位置
			right = buf[pos--][1];//获取新的排序范围的末尾位置
		}else{
			if (j+1<right && j-1 > left)//若前后两部分都超过一个元素
			{
				buf[++pos][0] = j+1;
				buf[pos][1] = right; //保存排序后边部分的首尾位置
				right = j-1;
			}
			else if (j+1>=right)//若只有被分成的前部分只有一个元素
			{
				right = j-1;
			}else{ //若只有被分成的后部分只有一个元素
				left = j+1;
			}
		}

	}
}
原文地址:https://www.cnblogs.com/CCCrunner/p/11781674.html