首页 > 其他分享 >归并排序知识总结

归并排序知识总结

时间:2023-11-20 23:45:22浏览次数:97  
标签:总结 sort 归并 int mid merge 排序

归并排序思维导图:

知识点:如果原序列中两个数的值是相同的,它们在排完序后,它们的位置不发生变化,那么这个排序是稳定的。快速排序是不稳定的,归并排序是稳定的。

快排变成稳定的=>使快排排序数组中的每个数都不同,将ai变成<ai, i>这个二元组,将ai的下标也放进来,使用双关键字排序。

快速排序平均时间复杂度是O(nlogn),最坏是O(n2),但是基本上不会达到的。归并排序时间复杂度O(nlogn)。

归并排序算法模版:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 1e5 + 10;
 6 
 7 int n;
 8 int q[N], tmp[N];
 9 
10 void merge_sort(int q[], int l, int r)
11 {
12     if (l >= r) return;
13 
14     int mid = l + r >> 1;
15 
16     merge_sort(q, l, mid), merge_sort(q, mid + 1, r);
17 
18     int k = 0, i = l, j = mid + 1;
19     while (i <= mid && j <= r)
20         if (q[i] <= q[j]) tmp[k++] = q[i++];
21         else tmp[k++] = q[j++];
22     while (i <= mid) tmp[k++] = q[i++];
23     while (j <= r) tmp[k++] = q[j++];
24 
25     for (i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];
26 }
27 
28 int main()
29 {
30     scanf("%d", &n);
31     for (int i = 0; i < n; i++) scanf("%d", &q[i]);
32 
33     merge_sort(q, 0, n - 1);
34 
35     for (int i = 0; i < n; i++) printf("%d ", q[i]);
36 
37     return 0;
38 }
View Code

 

标签:总结,sort,归并,int,mid,merge,排序
From: https://www.cnblogs.com/ykycode/p/17845211.html

相关文章

  • 每日总结
    今日收获写了软件设计作业,感觉发挥还不错欸~~和友友们一起弄了erp作业~~明天预计好好上课,好好写作业~~顺利通过每一节课;继续和友友们冲刺一下子~~......
  • 每日总结
    今天启动hbase的时候发现Hmaster过一段时间会自动消失,导致hbase启动失败,经过上网查询,得知虚拟机的时间不同步防火墙没有关闭hdfs的接口不对hbase中的hbase-site.xml文件中的属性值(hbase.rootdir)主机端口不一致 最后经过排查发现,hbase的配置文件hbase-site.xml和hdfs-core......
  • 数据库复习总结(并发控制一)
    目录前言3种并发异常丢失修改(写写异常)不可重复读(包括幻读情况读写异常)脏读为处理并发异常出现的机制--加锁加锁规范--封锁协议一级封锁协议(解决修改丢失)举例二级封锁协议(解决修改丢失,脏读)举例三级封锁协议(解决修改丢失,脏读,不可重复读)举例加锁产生问题活锁死锁解决办法针对活锁针......
  • 2023-2024-1 20232407 《网络》 第二周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:密码学基础中的对称加密和非对称加密有什么区别?它们分别适用于什么场景?解决方案:询问GPT问题2:什么是数字签名?它是如何保证消息的完整性和真实性的?解决方案:询问GPT基于AI的学习思考在密码学基础中,对称加密和非对称加密是......
  • 每日总结11.20
    命令模式1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。实验任务:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。......
  • 现代密码学 - 整理总结
    一、概述1. 信息安全三要素保密性(Confidentiality):使截获者在不知密钥条件下不能解读5完整性(Integrity):保证信息从真实的发送者传送到真实的接收者手中,传送过程中没有非法用户添加删除和替换等可用性(Availability):是指保障信息资源随时可提供服务的能力特性/......
  • 2023.11.20——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.mybatis2.JavaGUI明日计划:学习......
  • 2023-2024-1 20232422《网络》第2周学习总结
    教材学习内容总结教材内容思维导图如下心得体会:学习密码学让我深入了解加密的基本概念,如对称加密、非对称加密、哈希函数等,理解这些概念对于设计和分析安全系统至关重要。密码学不仅仅应用于数据传输的加密,还涉及到数字签名、身份认证、安全协议等多个领域。密码学在计算......
  • JAVA冒泡排序
    //冒泡排序publicclassDemo05{publicstaticvoidmain(String[]args){int[]arr={4,1,5,2,3};for(inti=0;i<arr.length-1;i++){//外循环:控制比较轮数(数组长度-1)i:0,1,2,3for(intj=0;j<arr.length-1......
  • 分治与归并
    归并算法:递归+合并,在递归的途中进行分治。递归会把区间越分越小,此时就可以进行分治操作。可以使用全局变量进行分治操作。可以在函数中进行分治操作,在递归树中实现pushup和pushdown,记性父节点与子节点的关系计算。  classSolution{public:structNode{......