常用排序
排序
- 选择排序
- 插入排序
- 排序题与sort函数的应用
选择排序
void selectSort(){
for(int i=1; i<=n; i++){ //进行n趟操作
int k=i;
for(int j=i;j<=n;j++){ //选出[i,n]中最小的元素,下标记为k
if(A[j]<A[k]){
k=j;
}
}
int temp=A[i];
A[i]=A[k];
A[k]=temp;
}
}
插入排序
int A[maxn],n;// n为元素个数,数组下标为1~n
void insertSort{
for(int i=2; i<=n; i++){
int temp=A[i] j=i;
while(j>1&&temp<A[j-1]){
A[j]=A[j-1]; //把A[j-1]后移一位至A[j]
j--;
}
A[j]=temp;
}
}
排序题与sort函数的应用
sort函数
1.用法
1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std;
2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)
3、Sort函数有三个参数:(第三个参数可不写)
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(尾元素地址的下一个地址)
(3)第三个参数是比较函数。可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
int a[6]={9,4,2,5,6,-1};
//将a[0]~a[3]从小到大排序
sort(a,a+4);
//结果是2,4,5,9,6,-1
}
值得注意的是,如果对于序列进行排列,那么序列中的元素(可为int,double,char等)一定要有可比性,因此要制定规则建立这种可比性(如结构体)sort的第三个可选参数就是来指定这种规则。
2. 实现比较函数cmp
bool cmp(int a, int b){
return a>b;//可以理解为当a>b时把a放在b前面,实现从大到小的排序
}
//调用
sort(a,a+4,cmp);
例如对于结构体,如果想要输出结果按照x从小到大排序
struct node{
int x,y;
}ssd[10];
bool cmp(node a,node b){
return a.x>b.x;
}
sort(ssd,ssd+3,cmp);
如果想要输出结果先按照x从小到大排序,如果x值相等,再按照y从小到大排序
bool cmp(node a,node b){
if(a.x!=b.x) return a.x>b.x;
else return a.y<b.y;
}
- 容器的排序
在STL标准容器中,只有vector,string,deque是可以使用sort的。因为像set,map这种容器是用红黑树实现的,元素本身就有序,故不允许使用sort排序。
vector<int> vi;
sort(vi.begin(),vi.end(),cmp)

浙公网安备 33010602011771号