排序算法
河林山
这个作者很懒,什么都没留下…
展开
-
堆排序(啊哈算法版)
题意:——给出n个数,从小到大排序。前提知识:——了解什么是树,什么是二叉树,什么是完全二叉树,以及特点最小堆:堆顶是最小值,一般放于数组的第一个位置,但是构建完最小堆后不能保证数据一定是按从小到大放置。最小堆定义:在一棵完全二叉树中,所有的父结点都比子结点要小。这里未强调左右子结点谁大谁小,请看第二个图(最小堆)便可明白。堆排序思想:以该数据为例:构建最小堆1499 5 36 7 22 17 46 12 2 19 25 28 1 92构建一个完全二叉树显而易见,此刻堆顶并不是原创 2022-03-01 14:18:47 · 603 阅读 · 0 评论 -
快速排序(先归并再快排)
题目:——给出n个数,从小到大排序,并输出牛客例题1牛客例题2Acwing例题3(此例题下面代码超时,该题需付费可做,最下面会提供可过代码)啊哈一书快排思想:二分思想:先对大区间进行排序,并不是真正意义上的排好序:1. 以大区间第一个数为哨兵,实现以下操作: a. 比它小的通通放到左边,比它大的通通放到右边 b. 并不要求哨兵的左右各部分必须是有序的 如何实现操作a,遍历交换即可 c. 需要两个指针i,j,最初指向区间的最左、最右端 让 j 从位置 j 往左找,找到比哨兵原创 2022-02-26 11:47:20 · 85 阅读 · 0 评论 -
归并排序(先归并再快排)
题意:——给出n个数,从小到大输出思想:与快速排序区别是:快速排序:先大区间排序,然后细化到小区间排序,最后区间长度为1时,顺序排好。归并排序:先从小区间排序,然后扩大到大区间排序。代码:#include<bits/stdc++.h>using namespace std;const int maxn=500005;int a[maxn],b[maxn];void Merge(int low,int mid,int high){ int i=low,j=mid+1,原创 2022-02-26 19:48:02 · 282 阅读 · 0 评论 -
桶排序(简单思想)
题意: 给出n个数,将这n个数从小到大排序。输入: 4 2 2 1 5 [不大于10]输出: 1 2 2 5桶排序思想:拿这个例题来讲:拿出11个桶,依次排开,对桶编号0~10把每个数丢进相应的桶里面依次输出即可。代码:#include<stdio.h>#include<string.h>int a[11];int main(){ memset(a,0,sizeof(a)); int n,x;scanf("%d",&a原创 2022-02-25 21:51:14 · 207 阅读 · 0 评论 -
确定比赛名次(拓扑排序)HDU - 1285
题目:确定比赛名次vjudge提交链接题意:——n支队伍,给出m行对战信息。每行a,b表示a队赢了b队。输出一个符合要求的队伍排名。注意:若符合条件的排名不唯一,编号小的队伍在前。注意:数据可能存在重复。数据范围:n<=500。题解:若n的范围如题目所示,暴力+拓扑排序。注意事项:去重用sort排序或者二维数组标记都行。一次只排一个队伍的名次,不然会错的。若n超过十万,sort排序+邻接表+优先队列+拓扑排序解释:sort排序:数据去重。邻接表:存队伍信息。优先队原创 2021-06-13 01:17:47 · 560 阅读 · 0 评论