算法——十大排序 (部分未完结)

news2024/11/15 20:07:18

总结

为什么需要稳定排序?

▪ 让第⼀个关键字的排序结果服务于第⼆个关键字排序中数值相同的那些数

▪ 主要是为了第⼀次考试分数相同时候,可以按照第⼆次分数的⾼低进行排序 

 一、冒泡排序

从最简单的冒泡排序开始

思想:交换相邻的元素,每次把最大的放在最后

vector<int> bubble_sort(vector<int>& arr) {
    for (int i = 0; i < arr.size(); ++i) {
        bool flag = false;
        for (int j = 0; j < n - i -1; ++j) {
            if (arr[j] > arr[j+1]) {
                swap(arr[j], arr[j+1]);
                flag = true;
            }             
        }
        if (flag == false) break;
    }
    return arr;
}

• 稳定排序、原地排序

• 最好O(n)、最差O(n^2)

• 拓展

        a. 优化:代码中的flag,如果数组整个已经有序,数组有序就退出

        b. 再优化:后半部分可能已经有序,每次可以更新j循环的右边界        

        c. 使用递归实现冒泡排序

        d. 使用两个栈实现冒泡排序

        e. 对链表进行冒泡排序(交换值or交换节点)  

        拓展可看冒泡排序

二、选择排序

思想:选⼀个最小的和前面的交换

vector<int> insertionSort(vector<int> arr) {
    if(arr.size() == 0) return arr;
    for (int i = 0; i < arr.size(); i++){
        int min = i;
        for (int j = i + 1; j < arr.size(); j++) {
            if(arr[j] < arr[min]) min = j;
        }
        swap(arr[i], arr[min]);
    }
    return arr;
}

 

三、快速排序

void quick_sort(int q[], int l, int r)  //stl源码剖析中快速排序差不多就是用的这种双指针
{
    if (l >= r) return;
    int i = l - 1, j = r + 1, x = q[l + r >> 1];
    while (i < j) {
        do i++; while (q[i] < x);
        do j--; while (q[j] > x);
        if (i < j) {
            swap(q[i], q[j]);
        }
    }
    quick_sort(q, l, j);
    quick_sort(q, j+1, r);
}

 

 

四、归并排序


void merge_sort(int q[],int l, int r) //用到分治的思想。
{      
    if(l >= r) return;
    int mid = l + r >> 1;
    vector<int> tmp(r - l + 1, 0);
    merge_sort(q, l, mid);
    merge_sort(q, mid+1, r);
    int i = l, j = mid + 1, k=0;
    while (i <= mid && j <= r) {
        if (q[i]<=q[j]) tmp[k++] = q[i++];
        else  tmp[k++] = q[j++];   //tmp数组在全局定义;
    }
    while(i <= mid)  tmp[k++] = q[i++];
    while(j <= r)  tmp[k++] = q[j++];  
    for (int i = l, j = 0; i <= r; i++,j++)
    {
        q[i] = tmp[j];
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子文件管理系统的最佳实践指南分享

电子文件管理系统是一种专门用于管理电子文件的软件工具&#xff0c;可以帮助组织更有效地管理、存储、检索和共享文件。 首先&#xff0c;在选择适合自己组织的电子文件管理系统时&#xff0c;需要考虑以下几个关键因素。首先&#xff0c;系统的易用性和用户界面是否友好&…

Qt应用开发(基础篇)——布局管理Layout Management

目录 一、前言 二&#xff1a;相关类 三、水平、垂直、网格和表单布局 四、尺寸策略 一、前言 在实际项目开发中&#xff0c;经常需要使用到布局&#xff0c;让控件自动排列&#xff0c;不仅节省控件还易于管控。Qt布局系统提供了一种简单而强大的方式来自动布局小部件中的…

前段时间面试了一些人,有这些槽点跟大家说说

大家好&#xff0c;我是拭心。 前段时间组里有岗位招人&#xff0c;花了些时间面试&#xff0c;趁着周末把过程中的感悟和槽点总结成文和大家讲讲。 简历书写和自我介绍 今年的竞争很激烈&#xff1a;找工作的人数量比去年多、平均质量比去年高。裸辞的慎重&#xff0c;要做好…

Android 第三方库CalendarView

Android 第三方库CalendarView 根据需求和库的使用方式&#xff0c;自己弄了一个合适自己的日历&#xff0c;仅记录下&#xff0c;方便下次弄其他样式的日历。地址 需求&#xff1a; 只显示当月的数据 默认的月视图有矩形的线 选中的天数也要有选中的矩形框 今天的item需要…

强推!大语言模型『百宝书』,一文缕清所有大模型!

夕小瑶科技说 原创 作者 | 王思若 最近&#xff0c;大型语言模型无疑是AI社区关注的焦点&#xff0c;各大科技公司和研究机构发布的大模型如同过江之鲫&#xff0c;层出不穷又眼花缭乱。 让笔者恍惚间似乎又回到了2020年国内大模型“军备竞赛”的元年&#xff0c;不过那时候…

package-lock.json 作用

参照&#xff1a; https://www.cnblogs.com/honkerzh/p/16767566.html

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

山西电力市场日前价格预测【2023-08-01】

日前价格预测 预测明日&#xff08;2023-08-01&#xff09;山西电力市场全天平均日前电价为310.15元/MWh。其中&#xff0c;最高日前电价为335.18元/MWh&#xff0c;预计出现在19: 45。最低日前电价为288.85元/MWh&#xff0c;预计出现在14: 00。 价差方向预测 1&#xff1a;实…

无涯教程-jQuery - css( properties )方法函数

css(properties)方法将键/值对象设置为所有匹配元素的样式属性。 css( properties ) - 语法 selector.css( properties ) 上面的语法可以写成如下- selector.css( {key1:val1, key2:val2....keyN:valN}) 这是此方法使用的所有参数的描述- key:value - 设置为样式属…

郑州https数字证书

很多注重隐私的网站都注重网站信息的安全&#xff0c;比如购物网站就需要对客户的账户信息以及支付信息进行安全保护&#xff0c;否则信息泄露&#xff0c;客户与网站都有损失&#xff0c;网站也会因此流失大量客户。而网站使用https证书为客户端与服务器之间传输的信息加了一个…

<Git>版本控制工具Git常见的开发操作

下载安装,环境变量配置直接百度; 1.代码拉取: 操作步骤&#xff1a;在正确配置完git的条件下:在本地文件夹下&#xff1a;右键–Git Bash -Here&#xff1a; 出现如下弹窗: 在黑窗口输入代码拉取路径(一般都是把命令和路径直接在外面写好,直接粘贴(在窗口右键,Paste)) 代码拉去…

JavaScript学习 -- 对称加密算法3DES

在现代的互联网时代&#xff0c;数据安全性备受关注。为了保护敏感数据的机密性&#xff0c;对称加密算法是一种常用的方法。在JavaScript中&#xff0c;3DES&#xff08;Triple Data Encryption Standard&#xff09;是一种常用的对称加密算法。本篇博客将为您展示如何在JavaS…

竞速榜实时离线对数方案演进介绍 | 京东云技术团队

一、背景 竞速榜是大促期间各采销群提供的基于京东实时销售数据的排行榜&#xff0c;同样应对大促流量洪峰场景&#xff0c;通过榜单撬动品牌在京东增加资源投入。竞速榜基于用户配置规则进行实时数据计算&#xff0c;榜单排名在大促期间实时变化&#xff0c;相关排名数据在微…

Chrome浏览器中的vue插件devtools的下载方式(使用Chrome应用商店/科学上网情况下)

目录 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤&#xff1a; 测试阶段&#xff1a; 最近做项目要使用devtools这个vue插件。 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤…

灭蚊灯上架亚马逊美国站UL1559测试报告办理

近年来&#xff0c;随着全球气候变暖和环境变化&#xff0c;蚊虫成为了世界各地人们的头疼问题。为了解决这一困扰&#xff0c;我司研发出一款创新的昆虫控制设备——灭蚊灯&#xff0c;并成功将其上架亚马逊美国站。为了满足亚马逊站对产品的要求&#xff0c;我们积极办理了UL…

寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目: 注:蓝桥杯2016年省赛C++A组第6题 请填写表示方案数目的整数。 题解: 由题可知这是一道全排列问题,因此我们可以使用c++的next_permutation函数对于1-13的数字进行全排列即可,并每次排列判断是否满足题意。 注意:你提交的应该是一个整数,不要填写任何多余的内…

测试|Selenium介绍及环境搭建

测试|Selenium介绍及环境搭建 1.Selenium是什么 Selenium是用来做web网站 UI自动化的测试工具/测试框架。 我们这里说的Selenium是Selenium2.0&#xff0c;它由Selenium IDE&#xff0c;Webdriver, Selenium Grid组成。 Selenium IDE是用于Selenium测试的完成集成开发环境&…

小程序反馈与投诉混淆官方修改指引

根据《微信小程序平台运营规范》5.14“混淆行为&#xff1a;5.14.1 恶意混淆腾讯官方功能”&#xff0c;相关违规类型包括但不限于以下类型。 官方“反馈与投诉”入口与样式&#xff1a; 违规类型1&#xff1a;混淆官方投诉入口 小程序中的投诉入口样式与官方投诉入口icon名称…

边缘检测(Canny算子)实现原理

当前,边缘检测算法在实际应用中越加广泛,技术趋势也是快速发展,热火朝天。很多朋友或多或少了解,需要实现各类功能,尤其是一些复杂的需求,实现更好的滤波、满足更佳的提取效果,一时半会儿无从下手。 下面小编就带大家了解关于边缘检测算子的实现原理。由于边缘检测算子常…

相约脑暴会,共创大未来——动态实时三维人体重建脑暴会

今夏我们召集江湖中的有识之士&#xff0c;共同探讨动态实时三维人体重建制作容积视频的方案&#xff0c;展开一场别开生面的脑暴会。在此&#xff0c;我们向全球开发者发出诚挚邀请&#xff0c;邀请您加入我们周三&#xff08;8月2日&#xff09;晚上八点通过腾讯会议进行的脑…