五大排序

做到了相关的题,所以来总结一下

 

以复杂度排序

一、计数排序(n+k)

原理

记录每个数出现次数,依次枚举数的大小

限制

1、输入的数据类型需是区间内有限的,浮点数就不行

2、数的大小在有限范围内

稳定

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    n=read();
    for(int i=1;i<=n;++i)  a[read()]++;
    for(int i=0;i<=k;++i)  while(a[i]--)  cout<<i<<" ";
} 

 二、堆排序(nlogn)

原理

利用优先队列内部排序,直接输入输出

限制

只能挨个取数,并且是一次性取

不稳定

代码

#include <iostream>
#include <queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> > a; //定义小根堆(小顶堆),从小到大排序
int n,t;
int main()
{
    n=read();
    for (int i=1;i<=n;i++)  a.push(read());
    for (int i=1;i<=n;i++)
        cout <<a.top() <<' ',a.pop(); 
}

 

posted @ 2022-09-16 11:21  yisiwunian  阅读(24)  评论(0编辑  收藏  举报