[C/C++] 如何快速得写出快速排序

最近很多同学找实习,面试一个环节是纸上写程序,如快速排序,链表合并等。那如何在短时间内有效写出快排?

快排是一种分治法,每次找到基准并划分数组,再依次递归即可。重点在于如何划分,划分的重点在于从两侧的遍历和替换。(这里初始基准取第一个元素)

压缩代码后快排程序如下:

<pre name="code" class="cpp">#include<iostream>
using namespace std;
int partion(int first,int last,int input[])
{
	int p=input[first];
	while(first<last){
		while(first<last && input[last]>=p) last--; 
		input[first]=input[last]; //把小数放p左边
		while(first<last && input[first]<=p) first++;
		input[last]=input[first]; //把大数放p右边
	}
	//此时first=last,返回基准位置即可
	input[first]=p;
	return first; 
}
void quickSort(int first,int last,int input[])
{
	if(first<last){
		int p=partion(first,last,input);//用基准划分
		quickSort(first,p-1,input); //基准左侧快排
		quickSort(p+1,last,input); //基准右侧快排
	}
}
int main()
{
	int n,input[20];
	cin>>n;
	for(int i=0;i<n;i++) cin>>input[i];
	quickSort(0,n-1,input);
	for(int i=0;i<n;i++) cout<<input[i]<<" ";
	cout<<endl;
	system("pause");
	return 0;
}


此为从小到大排序,从大到小的排序只需要把partion里第二层的2个while内>=和<=改成相反即可。 

核心代码只有十几行,不要把他想的太复杂。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值