快速排序

快速排序
快速排序1

void swapa(int &a,int &b){
	int t = a;
	a = b;
	b = t;
}
int par(int a[],int low,int high){
	 int key;
	 key = a[low];
	 while (low < high)
	 {
		 while(low<high && a[high]>=key)
		 {
			  high--;
		 }
		 if (low < high)
		 {
			 swapa(a[low],a[high]);
			 low++;
		 }
		 while (low<high && a[low] <= key)
		 {
			 low++;
		 }
		 if (low < high)
		 {
			 swapa(a[low],a[high]);
			 high--;
		 }
	 }
	 a[low] = key;
	 return low;
}
void quick(int a[],int low,int high){
	if (low < high)
	{
		int r = par(a,low,high);
		//show(a, 8);
		//getchar();
		quick(a, low, r-1);	//对左边排序
		quick(a, r+1, high);//再对右边排序
	}
}

2

int par2(int a[],int low,int high){
	int key;
	key = a[low];
	while (low < high)
	{
		while(low<high && a[high]>=key)
		{
			high--;
		}
		if (low < high)
		{
			a[low] = a[high];
			low++;
		}
		while (low<high && a[low] <= key)
		{
			low++;
		}
		if (low < high)
		{
			a[high] = a[low];
			high--;
		}
	}
	a[low] = key;
	return low;
}

各种快排的选择题

已知关键字序列{66,82,25,51,98,108} ,利用快速排序方法,以第一个元素为基准得到的一趟排序结果为
$表示左指针位置,#表示右指针位置
右指针先找
右边找小于key的,左边找大于key的,找的就交换,对端指针++;
右指针开始轮询,比如右边找到了,左右交换,同时左指针++,右指针保持,接着左指针开始轮询
{66,82,25,51,98,108}
51,$82,25,#66,98,108
51,$66,#25,82,98,108
51,25,#$66,82,98,108

对序列{ 30, 15, 20, 60, 70, 80, 5, 100, 10, 40}进行一次快速排序, 第一次快排后,排序结果为?
以第一个为key
{30,15,20,60,70,80,5,100,10,40}
key=30
10,$15,20,60,70,80,5,100,#30,40
10,15,20,$30,70,80,5,#100,60,40
10,15,20,5,$70,80,#30,100,60,40
10,15,20,5,#$30,80,70,100,60,40

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值