c++ 快排思想

news2025/1/16 11:06:43

文章目录

  • 讲下思想
  • 时间复杂度
  • 优化
  • 代码实现

讲下思想

我这边主要是分左右两边的指针寻找
在这里插入图片描述

  • left指针从左边寻找大于p的数

  • right 从右寻找小于p的数

  • 然后找到进行交换,直到相遇在一起
    在这里插入图片描述

  • 说明这个位置是分隔的位置

  • 而p的数就是分隔的数,所以对p和l进行一个swap
    在这里插入图片描述

时间复杂度

最坏的情况为O(n^2)
平均为O(nlog2n)

优化

主要从对比元素的选择入手

  • 最后交换, 这边必须从右往左开始,不然出问题
  • 因为从右就会寻找到比左边小的临界值,从左会寻找到大于的临界值,到时候交换会出问题,这个根据选择的对比标准来的

代码实现

#include <vector>
#include "quicksort.h"
#include <iostream>
#include <QDebug>
using namespace std;

int get_middle(vector<int>& arr, int start, int end) {
    if(end == start) return end;
    int middle = (end - start)/2;
    if(arr[start] > arr[middle]){
        swap(arr[start], arr[middle]);
    }
    if(arr[middle] > arr[end]) {
        swap(arr[middle], arr[end]);
    }

    return middle;
}
void quickSort(vector<int>& arr, int l, int r) {
    //[11, 2, 33, 2, 3, 4]
    //中值选择

    if(l >= r) return;
    int i, j;

    i = l;
    j = r;
    int povit = l;
    while(i < j) {

        while(arr[j] >= arr[povit] && i < j) {
            j--;
        }
        while(arr[i] <= arr[povit] && i < j) {
            i++;
        }
        swap(arr[j], arr[i]);

   }

    swap(arr[i], arr[povit]);

    qDebug() << "排完结果" << arr;
    quickSort(arr, l, i - 1);
    quickSort(arr, i + 1, r);


}

#include "widget.h"

#include <QApplication>
#include <QDebug>
#include <memory>
#include <vector>
#include "quicksort.h"
#include <iostream>

//extern void quick_sort(int* arr, int low1, int high1);
using namespace std;
class Solution {

public:
    bool checkXMatrix(vector<vector<int>>& grid) {

        int n = grid.size();
        //判断对角线
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                if(i==j|| j== n-i-1){
                    if(grid[i][j] == 0) {qDebug()<<i<<j; return false;};
                } else {
                    if(grid[i][j] != 0) {qDebug()<<i<<j; return false;};
                }
            }

        }
        return true;
    }
};
int main(int argc, char *argv[])
{
    vector<int> v3 = {1,49,38,4,97,32,13,27,42 };
    int length = v3.size();
    qDebug() << v3;

    quickSort(v3, 0, length - 1);
    qDebug() <<"res" << v3;
    return 0;
//    Solution so;
//    bool su = so.checkXMatrix(v1);
//    vector<int> v3 = {1,49,38,4,97,32,13,27,49 };
//    quickSort(v3);

}
//快速排序




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

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

相关文章

什么都不会的应届生怎么找工作?

2023年&#xff0c;很多大学应届生都会面临到的一个问题&#xff1a;疫情三年上网课没有学到什么知识和技能&#xff0c;并且学习效果大多不理想&#xff1b;现在面临就业时对自身专业技能不自信&#xff0c;怀疑自己是否能找到工作&#xff0c;更别说是适合自己喜欢的工作。面…

Vue 3.2 源码系列:有点难的《最新 diff 算法详解》

本文首发自&#xff1a;稀土掘金、思否 博客代码已上传至github 点击这里 即可访问 另提供&#xff1a;完整代码&#xff08;tsrollup&#xff09;和视频教程 序 所谓算法指的是&#xff1a;把一种数据结构转化为另外一种数据结构的方法。 在runtime(运行时)阶段存在一个无论如…

内网渗透(四)之基础知识-搭建域环境

系列文章 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以免造成看不懂的情况&#xff01;&#xff01; 搭建域环境 在…

DataX案例实操

1、DataX使用 1.1、DataX任务提交命令 DataX的使用十分简单&#xff0c;用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer&#xff0c;并将Reader和Writer的信息配置在一个json文件中&#xff0c;然后执行如下命令提交数据同步任务即可。 [songhadoop102 …

JavaScript 进阶5:WebAPI:DOM- 网页特效篇

JavaScript 进阶5&#xff1a;WebAPI&#xff1a;DOM- 网页特效篇 Date: January 28, 2023 Text: 轮播图高级版待解决 滚动事件、加载事件、元素大小和位置&#xff08;scroll、offset、client&#xff09;、轮播图案例 目标 能够制作常见的网页特效具备制作常见网页焦点图的…

WebRTC音频系统 之audio技术栈简介-1

文章目录第一章 WebRTC技术栈简介1.1 视频会议中常见的服务端架构1.2 WebRTC 网络协议栈1.3 WebRTC 源码目录结构1.4 client侧技术栈1.5 WebRTC native编译以及debug1.6 APM模块1.7 ADM模块WebRTC是Google开源的Web实时音视频通信框架&#xff0c;其提供P2P的音频、视频和一般数…

PTA---寒假温故知新作业

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;PTA学校题集 &#x1f4ac;总结&#xff1a;希望你看完之后&a…

Python Fiddler最新抓包工具教学:快速获取公众号(pc客户端)公开数据

嗨害大家好鸭~ 我是小熊猫 之前的Fiddler版本过期了&#xff0c;现在再来补上一个小案例 源码资料电子书:点击此处跳转文末名片获取 开发环境 - python 3.8 运行代码 - pycharm 2021.2 辅助敲代码 - requests第三方模块 - Fiddler 汉化版 抓包的工具 - 微信PC端 如何抓包 配置…

Python 初学者进阶的九大技能

Python是一种很棒的语言&#xff0c;语法简单&#xff0c;无需在代码中搜索分号。对于初学者来说&#xff0c;Python是入门最简单的语言之一。 Python有大量的库支持&#xff0c;你还可以安装其他库来增加自己的编程经验。 学了一阵子之后&#xff0c;你可能会觉得&#xff1…

成功解决使用yum安装的php版本过低的问题

文章目录前言一. 问题复现二. 问题分析三. 问题解决&#xff1a;四. 重要补充1. yum-config-manager介绍2. yum-uitls介绍3. remi资源库的介绍总结前言 大家好&#xff0c;我是沐风晓月。 日常学习过程经常会遇到一些奇奇怪怪的问题&#xff0c;为了把每个问题记录下来&#…

2023Facebook该如何养号?Facebook防封指南了解一下!

Facebook是大多数跨境电商卖家主攻的社交媒体平台&#xff0c;但也经常会有卖家抱怨&#xff0c;Facebook账号又无缘无故地被封了。Facebook是公认的非常容易被封&#xff0c;而新开的账号&#xff0c;不仅会导致前期的积累化为乌有&#xff0c;同时新账号被封的可能性也更高。…

python基于融合SPD-Conv改进yolov5与原生yolov5模型实践路面裂痕裂缝检测

SPD-Conv源于2022年一篇专门针对于小目标和低分辨率图像研究提出来的新技术&#xff0c;可以用于目标检测任务&#xff0c;能够一定程度提升模型的检测效果&#xff0c;今天正好有时间就想基于SPD融合yolov5s模型来开发路面裂痕裂缝检测模型&#xff0c;同时与原生的yolov5s模型…

Jenkins配置和使用

Jenkins的使用过程:配置代码库,然后配置代码静态检查,配置编译,配置单元测试,部署测试环境部署,测试,部署staging环境,测试通过,部署product环境 常见插件: git docker k8s maven grandle join Copy artifact ssh访问模式master agent &#xff08;1&#xff09;安装J…

线性代数 - 期末复习

SDU 线性代数 - 期末复习&#xff08;无二次型部分&#xff09;第一章&#xff1a; 矩阵1. 矩阵概念2. 矩阵运算&#x1f499;1&#xff09;线性运算&#xff1a;1》加、减法&#xff1a;2》数乘&#x1f499;2&#xff09;乘法运算&#x1f499;3&#xff09;矩阵的转置3. 方阵…

什么是RTK基站?它的工作原理是什么

欢迎来到东用知识小课堂&#xff01;说到定位&#xff0c;相信大家一定不会觉得陌生。如今我们所处的信息时代&#xff0c;人人都有手机。每天&#xff0c;我们都会用到与地图和导航有关的APP。这些APP&#xff0c;就是基于定位技术的。说到定位技术呢&#xff0c;大家又肯定会…

行为型模式-解释器模式

1.概述 如上图&#xff0c;设计一个软件用来进行加减计算。我们第一想法就是使用工具类&#xff0c;提供对应的加法和减法的工具方法。 //用于两个整数相加 public static int add(int a,int b){return a b; } //用于两个整数相加 public static int add(int a,int b,int c){…

OAuth2(三)

首先把项目在本地运行起来 注意redis的配置 在地址栏输入 自动跳断点 界面截图

.NET MAUI 开发电子木鱼(上)

本文介绍如何使用 .NET MAUI 开发一个电子木鱼应用。以实际的小应用开发为例&#xff0c;通过这个开发过程&#xff0c;介绍了其涉及的 .NET MAUI、Blazor、前端等相关知识点。文章涉及的应用已开源在 Github&#xff0c;大家可前往下载体验&#xff1a; https://github.com/sa…

[架构之路-99]:《软件架构设计:程序员向架构师转型必备》-9-确定关键性需求与决定系统架构的因素

第9章 确定关键性需求与决定系统架构的因素9.1 概念架构是什么9.1.1 概念架构是直指目标的设计思想、重大选择9.1.2 案例1&#xff1a;汽车电子AUTOSAR——跨平台复用NA9.1.3 案例2&#xff1a;腾讯QQvideo架构——高性能NA9.1.4 案例3&#xff1a;微软MFC架构——简化开发NA9.…

断网后,是否能够ping通127.0.0.1?

引言 说起这个问题很搞笑&#xff0c;其实也是挺有意思的。是这么回事&#xff0c;公司突然断网了&#xff0c;有人突然来了一句&#xff0c;断网了&#xff0c;能不能ping通127.0.0.1呢&#xff1f;大家就实验起来了&#xff01; 结果显而易见&#xff0c;如上图&#xff0c;…