排序算法-归并排序与快速排序

归并排序与快速排序

快速排序是利用的递归思想:选取一个基准数,把小于基准数的放左边 大于的放右边直到整个序列有序 。快排分割函数 O(lognn), 空间 :没有额外开辟新的数组但是递归树调用函数会占用栈内存 O(logn) 。
归并排序:在递归返回的过程中保证每个返回的子集都是有序的。时间O(logn
n),空间:O(n)。

归并排序

#include<iostream>
#include<stdlib.h>
#include<time.h> 
using namespace std;
//在归 的过程中 进行数据的合并 达到排序的效果
//时间O(logn*n) 空间:O(n) 
//递归排序
void _merge(int arr[], int left, int mid, int right){int *p = new int[right - left + 1]; int idx = 0; int i = left;int j = mid + 1;//开始数据合并 while(i <= mid && j <= right){if(arr[i] <= arr[j]){p[idx++] = arr[i++];}else{p[idx++] = arr[j++];}}//左端有剩余 while(i <= mid){p[idx++] = arr[i++];} //右端有剩余while(j <= right){p[idx++] = arr[j++];} //将合并后的数据拷贝给原数组for(i = left, j = 0; i <= right ; ++i, ++j){arr[i] = p[j];}delete []p; 
} //归并排序递归接口函数 
void  _mergeSort(int arr[], int left, int right){// 递归结束条件if(left >= right) return; int mid = (left + right) / 2;//先传递 _mergeSort(arr, left, mid);_mergeSort(arr, mid + 1, right);//再归并 额外的内存空间 小段有序 和并为 大段有序_merge(arr, left, mid, right); 
} void _mergeSort(int arr[] , int length){return _mergeSort(arr, 0, length - 1);
}int main(){int arr[10];int length = 10;srand(time(NULL));for(int i = 0 ; i < length ; ++i){arr[i] = rand() % 100 + 1;cout<<arr[i]<<" "; }cout<<endl;_mergeSort(arr,length); for(int i = 0 ; i < length ; ++i){cout<<arr[i]<<" "; }return 0;
} 

快速排序

#include<iostream>
#include<stdlib.h>
#include<time.h> 
using namespace std;
//快速排序思想:选取一个基准数,把小于基准数的放左边 大于的放右边 直到整个序列有序 
//从数组左右两边都找 找到一个停下来换另外一边  
//快排优化思想:随着快排算法的执行,数据越来越有序,在一定范围内,可以采用插入排序代替快速排序 //快排分割函数 O(logn*n) 空间 :没有额外开辟新的数组但是递归树调用函数会占用栈内存 O(logn) 
int partation(int arr[] , int begin , int end){int val = arr[begin];int i = begin;int j = end;while(i < j){while(i < j && arr[j] > val)j--;//找到小于基准数 if(i < j){arr[i] = arr[j];i++; }while(i < j && arr[i] < val){i++;}//大于的基准数 if(i < j){arr[j] = arr[i];j--;}} arr[i] = val;return i;
}
//快排的递归接口 
void _fast(int arr[] , int begin , int end){if(begin >= end) return; //递归结束条件//在区间做一次快排int pos = partation(arr, begin, end);//对基准数的左边快排_fast(arr, begin , pos - 1); //对基准数的右边做快排 _fast(arr, pos + 1 , end);}void _fast(int arr[] , int length){return _fast(arr, 0 , length - 1); 
}int main(){int arr[10];int length = 10;srand(time(NULL));for(int i = 0 ; i < length ; ++i){arr[i] = rand() % 100 + 1;cout<<arr[i]<<" "; }cout<<endl;_fast(arr,length); for(int i = 0 ; i < length ; ++i){cout<<arr[i]<<" "; }return 0;
} 

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

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

相关文章

北大开源音频编辑模型PlayDiffusion,可实现音频局部编辑,比传统 AR 模型的效率高出 50 倍!

北大开源了一个音频编辑模型PlayDiffusion&#xff0c;可以实现类似图片修复(inpaint)的局部编辑功能 - 只需修改音频中的特定片段&#xff0c;而无需重新生成整段音频。此外&#xff0c;它还是一个高性能的 TTS 系统&#xff0c;比传统 AR 模型的效率高出 50 倍。 自回归 Tra…

MyBatis————入门

1&#xff0c;配置相关 我们上一期详细讲了一下使用注解来实现操作数据库的方式&#xff0c;我们今天使用xml来实现&#xff0c;有同学可能有疑问&#xff0c;使用注解挺方便呀&#xff0c;为啥还要注解呀&#xff0c;先来说一下注解我感觉挺麻烦的&#xff0c;但是我们后面要…

【推荐算法】推荐算法演进史:从协同过滤到深度强化学习

推荐算法演进史&#xff1a;从协同过滤到深度强化学习 一、传统推荐时代&#xff1a;协同过滤的奠基&#xff08;1990s-2006&#xff09;1.1 算法背景&#xff1a;信息爆炸的挑战1.2 核心算法&#xff1a;协同过滤1.3 局限性 二、深度学习黎明&#xff1a;神经网络初探&#xf…

Java基于SpringBoot的校园闲置物品交易系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

Ajax Systems公司的核心产品有哪些?

Ajax Systems 是一家专注于家庭安全和智能系统的公司&#xff0c;其核心产品如下3&#xff1a; 入侵保护设备&#xff1a;如 MotionCam Outdoor 无线室外运动探测器&#xff0c;配备内置摄像头和两个红外传感器&#xff0c;可通过预装电池运行长达三年&#xff0c;能在 15 米距…

64、js 中require和import有何区别?

在 JavaScript 中&#xff0c;require 和 import 都是用于模块导入的语法&#xff0c;但它们属于不同的模块系统&#xff0c;具有显著的区别&#xff1a; 1. 模块系统不同 require 属于 CommonJS 模块系统&#xff08;Node.js 默认使用&#xff09;。 语法&#xff1a;const…

Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料

JAVAaccess综合测评系统毕业设计 一、系统概述 本系统采用Java Swing开发前端界面&#xff0c;结合Access数据库实现数据存储&#xff0c;专为教育机构打造的综合测评解决方案。系统包含学生管理、题库管理、在线测评、成绩分析四大核心模块&#xff0c;实现了测评流程的全自…

【python】RGB to YUV and YUV to RGB

文章目录 1、YUV2、YUV vs RGB3、RGB to YUV4、YUV to RGB附录——YUV NV12 vs YUV NV21参考1、YUV YUV 颜色空间,又常被称作 YCbCr 颜色空间,是用于数字电视的颜色空间,在 ITU-R BT.601、BT.709、BT.2020 标准中被明确定义,这三种标准分别针对标清、高清、超高清数字电视…

运行示例程序和一些基本操作

欢迎 ----> 示例 --> 选择sample CTRL B 编译代码 CTRL R 运行exe 项目 中 Shadow build 表示是否 编译生成文件和 源码是否放一块 勾上不在同一个地方 已有项目情况下怎么打开项目 方法一: 左键双击 xxx.pro 方法二: 文件菜单里面 选择打开项目

计算机网络第2章(下):物理层传输介质与核心设备全面解析

目录 一、传输介质1.1 传输介质的分类1.2 导向型传输介质1.2.1 双绞线&#xff08;Twisted Pair&#xff09;1.2.2 同轴电缆&#xff08;Coaxial Cable&#xff09;1.2.3 光纤&#xff08;Optical Fiber&#xff09;1.2.4 以太网对有线传输介质的命名规则 1.3 非导向型传输介质…

PHP文件包含漏洞详解:原理、利用与防御

PHP文件包含漏洞详解&#xff1a;原理、利用与防御 什么是文件包含漏洞&#xff1f; 文件包含漏洞是PHP应用程序中常见的安全问题&#xff0c;当开发者使用包含函数引入文件时&#xff0c;如果传入的文件名参数未经严格校验&#xff0c;攻击者就可能利用这个漏洞读取敏感文件…

5.4.2 Spring Boot整合Redis

本次实战主要围绕Spring Boot与Redis的整合展开&#xff0c;首先创建了一个Spring Boot项目&#xff0c;并配置了Redis的相关属性。接着&#xff0c;定义了三个实体类&#xff1a;Address、Family和Person&#xff0c;分别表示地址、家庭成员和个人信息&#xff0c;并使用Index…

java内存模型JMM

Java 内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;定义了 Java 程序中的变量、线程如何和本地内存以及主内存进行交互的规则。它主要涉及到多线程环境下的共享变量可见性、指令重排等问题&#xff0c;是理解并发编程中的关键概念。 核心概念&#xff1a…

配置git命令缩写

以下是 Git 命令缩写的配置方法及常用方案&#xff0c;适用于 Linux/macOS/Windows 系统&#xff1a; &#x1f527; 一、配置方法 1. 命令行设置&#xff08;推荐&#xff09; # 基础命令缩写 git config --global alias.st status git config --global alias.co che…

准确--k8s cgroup问题排查

k8s cgroup问题排查 6月 06 17:20:39 k8s-node01 containerd[1515]: time"2025-06-06T17:20:39.42902033408:00" levelerror msg"StartContainer fo r \"46ae0ef9618b96447a1f28fd2229647fe671e8acbcec02c8c46b37051130c8c4\" failed" error&qu…

Go 中 map 的双值检测写法详解

Go 中 map 的双值检测写法详解 在 Go 中&#xff0c;if char, exists : pairs[s[i]]; exists { 是一种利用 Go 语言特性编写的优雅条件语句&#xff0c;用于检测 map 中是否存在某个键。让我们分解解释这种写法&#xff1a; 语法结构解析 if value, ok : mapVariable[key]; …

C# Wkhtmltopdf HTML转PDF碰到的问题

最近碰到一个Html转PDF的需求&#xff0c;看了一下基本上都是需要依赖Wkhtmltopdf&#xff0c;需要在Windows或者linux安装这个可以后使用。找了一下选择了HtmlToPDFCore&#xff0c;这个库是对Wkhtmltopdf.NetCore简单二次封装&#xff0c;这个库的好处就是通过NuGet安装HtmlT…

grafana 批量视图备份及恢复(含数据源)

一、grafana 批量视图备份 import requests import json import urllib3 import osfrom requests.auth import HTTPBasicAuthfilename_folders_map "folders_map.json" type_folder "dash-folder" type_dashboard "dash-db"# Grafana服务器地…

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…

露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去

注&#xff1a;略作重排&#xff0c;未整理去重。 一个人最了不起的能力&#xff1a;快速翻篇 原创 十点邀约作者 棠唐 2022 年 11 月 29 日 20:12 福建 《了凡四训》有言&#xff1a;“从前种种&#xff0c;譬如昨日死&#xff1b;从后种种&#xff0c;譬如今日生。” 人生犹…