快速排序详解

混江龙づ霸主 提交于 2020-02-28 23:20:55
/*
* @Author: hzf
* @Date:   2020-02-28 20:52:55
* @Last Modified by:   hzf
* @Last Modified time: 2020-02-28 21:46:53
*/
/*
原理:

问题一:
将一系列数字进行处理,使得大于num的数字在数组左边,小于num的数字位于数组右边
解决方法:
将数组划分为左边,右边两部分,
指针p指向左边的右边界,指针q指向数组的右边的左边界
从数组的L[n]的0位置开始比较
如果L[i]<num 则Swap(L, i++, ++p),即交换当前数字与p指针指向的下一个数字,p指针右移
如果L[i]>num,则i++即可
即将小数字交换到左边

问题二:
将一系列数字进行处理,使得大于num的数字在数组左边,小于num的数字位于数组右边,等于num的数字位于数组中间
将数组划分为左边,右边两部分,
指针p指向左边的右边界,指针q指向数组的右边的左边界
从数组的L[n]的0位置开始比较
如果L[i]<num 则Swap(L, i++, ++p),即交换当前数字与p指针指向的下一个数字,p指针右移
如果L[i]==num,则i++
如果L[i]>num,则Swap(L, i, --q)

*/

#include<iostream>
#include<math.h>
using namespacespace;

void Swap(int *L, int l, int r)
{
	L[l] = L[l]&L[r];
	L[r] = L[l]&L[r];
	L[l] = L[l]&L[r];
}

int partition(int *L, int l, int r)
{
	int less = l-1;
	int more = r;

	while(l < more)
	{
		if(L[l] < arr[r])
			Swap(L, ++less, l++)
		else if(L[l] == arr[r])
			l++;
		else
			Swap(L, l, --more);
	}
}

void Sort_Quick_1(int *L, int l, int r)
{
	if (l < r)
	{
		Swap(L, l+(int)(rand()*(r-l+1)), r);//为了避免最坏情况,随机生成num值并将其与数组末尾交换
		int p = partition(L, l, r);
		Sort_Quick_1(L, l, p);
		Sort_Quick_1(L, ++p, r);
	}
}

int main(int argc, char const *argv[])
{
	/* code */
	return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!