首页 > 编程语言 > 详细

模拟快速排序(C++版)

时间:2021-08-29 20:05:00      阅读:30      评论:0      收藏:0      [点我收藏+]

快数排序(低配算法)

原理优化 (分治)

将原来的N方优化为N*log(N)

将逐一对比优化为分步

/////////////以从大到小举例

先确定分界点,将分界点的值命名为X

(因为必须要在左右端点以内,所以一般取两端点之和除以2)

然后以X为中心进行交换

(将左边第一个比A大的数值的坐标记录,将右边第一个比A小的记录,交换两者的值)

直到X的左边都比X大,X的右边都比X小,停止,向两边重复进行操作(这时以分界点为中心分为两部分,向左的部分右端点为j,向右部分左端点为j+1///可改变)(log(n)次)

最后便是答案

代码仅供参考

C++版本

#include <iostream>
?
using namespace std;
?
int n;
int q[10010];//数据范围待定
void sort_(int q[],int l,int r)//q为数组,l、i为左右端点
{
if(l>=r) return;
int i=l,j=r-1,x=(l+r)>>1;//(l+r)>>1是l+r除以2的意思
while(i<j)
{
while(q[i]<x) i++;//(求x左边第一个大于x的值)
while(q[j]>x) j--;//(求x右边第一个小于x的值)
if(i<j) swap(q[i],q[j]);//交换i,j,下标的值
}
sort_(q,l,j),sort_(q,j+1,r);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&q[i]);
sort_(q,0,n);
for(int i=0;i<n;i++)
cout<<q[i]<<‘ ‘;
return 0;
}
?

 

模拟快速排序(C++版)

原文:https://www.cnblogs.com/stdio44/p/15202879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!