快速排序实现原理:
#include <iostream>
#include <algorithm>
using namespace std;
void quick_sort(int arry[],int maxlen,int op,int ed);
int main()
{
int a[10]={2,1,7,4,6,8,2,3,1,0};
//sort(a,a+10);
quick_sort(a,10,0,10-1);
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void quick_sort(int arry[],int maxlen,int op,int ed)//第二个参数其实没毛用T_T
{
int i,j;
if(op<ed)
{
i=op+1;
j=ed;
while(i<j)
{
if(arry[i]>arry[op])//如果比较的数组元素大于基准数,则交换位置。
{
int temp;
arry[j]^=arry[i];
arry[i]^=arry[j];
arry[j]^=arry[i];
j--;
}else
{
i++;
}
}
//跳出循环后i=j 处理op和i位置的数
if(arry[i]>=arry[op])// 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误!
{
i--;
}
if(i!=op)//当两个元素地址相等时,异或交换会出错,变成0
{//交换
arry[i]^=arry[op];
arry[op]^=arry[i];
arry[i]^=arry[op];
}
quick_sort(arry,maxlen,op,i);//递归
quick_sort(arry,maxlen,j,ed);
}
}
自定义sort()比较规则:
#include <iostream>
#include <algorithm>
using namespace std;
struct people
{
int num;
string name;
};
bool compare1(people a,people b)//自定义排序规则
{
return a.num<b.num; //升序排列,>号为降序排列
}
int main()
{
people a[3]={{2,"two"},{3,"three"},{1,"one"}};
sort(a,a+3,compare1);//sort第三个参数传比较函数的地址
for(int i=0;i<3;i++)
{
cout<<a[i].name<<endl;
}
return 0;
}