常用排序

排序

  1. 选择排序
  2. 插入排序
  3. 排序题与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;
}
  1. 容器的排序
    在STL标准容器中,只有vector,string,deque是可以使用sort的。因为像set,map这种容器是用红黑树实现的,元素本身就有序,故不允许使用sort排序。
vector<int> vi;
sort(vi.begin(),vi.end(),cmp)
posted @ 2022-03-08 17:19  huilinmumu  阅读(57)  评论(0)    收藏  举报