原理优化 (分治)
将原来的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;
}
?