可执行的快排 quicksort

很早之前就看过快排quicksort,昨天真正想去写,看能不能写出,结果哭,折腾了很久硬是没写成功,一咬牙,果断看书上的例子,结果坑爹了,理论讲的非常high,代码以执行,啥都没有,上网找了一些,运气差到极点,全是错的,估计都没有验证。

为了节省大家的时间,不要像我一样为了它,折腾个半天,搞得很是恼火,共享一下。


void swap(int &a,int &b)
{
	int temp = a;
	a= b;
	b = temp;
}

partition 函数:

int partition(int a[],int left,int right)
/*
eg:
	int a[10] = {1,2,3,4,10,6,7,8,9,0};
	quicksort(a,0,9);
  */
{
	int i=left;
	int j = right+1;		//-----1
	int temp = a[left];

	while(true)
	{	//第一个数 跳过 
		while(a[++i]<temp && i<right) ; 
		//因为 -----处已经加了1 所以不会少算		
		while(a[--j]>temp) ;		
		if(i>=j)						
			break;
		swap(a[i],a[j]);
	}
	//最后交换 可用swap
	a[left] = a[j];
	a[j] = temp;
	//无论最后一次的比较是i==j  还是i <j  
	//a[j] 都是小于temp 的且a[i] >temp 
	return j;
}

 递归 快排下去

void quicksort(int a[],int left,int right)
{
	if(left <right) //当只有一个数 即 left==right 时 不用排
	{
		int mid = partition(a,left,right);
		quicksort(a,left,mid-1);
		quicksort(a,mid+1,right);
	}
}
主函数测试
int main()
{
//	int a[9] = {1,2,3,4,10,6,7,8,9};
	int a[20] = {1,2,3,4,10,6,7,8,
		9,21,25,15,13,42,12,11,32,33,7};

	quicksort(a,0,sizeof(a)/sizeof(a[0])-1);
	for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
	{
		cout <<a[i] << " ";
	}
	cout <<endl;
	return 0;
}

奇数个个数数据测试:


偶数个个数数据

第二个数据测试:



已经测试  边界安全,大家放心使用 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值