排序复习_代码纯享

头文件

#pragma once
#include<iostream>
#include<vector>
#include<utility>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
using std::swap;//插入排序
//1、直接插入排序(稳定)
void InsertSort(vector<int>& v);
//2、希尔排序
void ShellSort(vector<int>& v);//选择排序
//1、直接选择排序
void SelectSort(vector<int>& v);
//2、堆排序
void HeapSort(vector<int>& v);//交换排序
//1、冒泡排序(稳定)
void BubbleSort(vector<int>& v);
//2、快速排序
void QuickSortTest(vector<int>& v);//归并排序(稳定)
void MergeSort(vector<int>& arr, int left, int right);//计数排序
void CountSort(vector<int>& v);void Print(vector<int>& v);

排序代码

#define  _CRT_SECURE_NO_WARNINGS
#include"sort.h"void Print(vector<int>& v) {for (int e : v) {cout << e << " ";}cout << endl;
}void InsertSort(vector<int>&v) {int n = v.size();for (int i = 0; i < n - 1; i++) {int end = i;int tmp = v[end + 1];while (end >= 0) {if (tmp < v[end]) {v[end + 1] = v[end];--end;}else {break;}}v[end + 1] = tmp;}
}void ShellSort(vector<int>& v) {int n = v.size();int gap = n;while (gap > 1) {gap = gap / 3 + 1;for (int i = 0; i < n - gap; ++i) {int end = i;int tmp = v[end + gap];while (end >= 0) {if (v[end] > tmp) {v[end + gap] = v[end];end = end - gap;}else {break;}}v[end + gap] = tmp;}}
}void SelectSort(vector<int>& v) {int n = v.size();int begin = 0, end = n - 1;while (begin < end) {int mini = begin;int maxi = end;for (int i = begin + 1; i < end; i++) {if (v[mini] > v[i]) {mini = i;}if (v[maxi] < v[i]) {maxi = i;}}swap(v[mini], v[begin]);if (maxi == begin) {maxi = mini;}swap(v[maxi], v[end]);++begin;--end;}
}void AdjustDown(vector<int>& v, int parent, int size) {int n = size;int child = parent * 2 + 1;while (child < n) {if (child + 1 < n && v[child + 1] > v[child]) {++child;}if (v[child] > v[parent]) {swap(v[child], v[parent]);parent = child;child = parent * 2 + 1;}else {break;}}
}void HeapSort(vector<int>& v) {int n = v.size();for (int i = (n - 2) / 2; i >= 0; i--) {AdjustDown(v, i, n);}int end = n - 1;while (end) {swap(v[0], v[end]);AdjustDown(v, 0, end);--end;}
}void BubbleSort(vector<int>& v) {int n = v.size();for (int j = 0; j < n; j++) {bool exchange = false;for (int i = 1; i < n - j; i++) {if (v[i] < v[i - 1]) {swap(v[i], v[i - 1]);exchange = true;}}if (exchange == false)break;}
}void QuickSort(vector<int>& v, int begin, int end) {if (begin >= end)return;int left = begin;int right = end;int key = begin;while (left < right) {while (left < right && v[right] >= v[key]) {right--;}while (left < right && v[left] <= v[key]) {left++;}swap(v[right], v[left]);}swap(v[key], v[left]);key = left;//begin  key  endQuickSort(v, begin, key - 1);QuickSort(v, key + 1, end);
}void QuickSortTest(vector<int>& v) {int n = v.size();int begin = 0;int end = n - 1;QuickSort(v, begin, end);
}// 合并两个已排序的子数组
void Merge(vector<int>& arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;// 创建临时数组vector<int> L(n1), R(n2);// 拷贝数据到临时数组 L[] 和 R[]for (int i = 0; i < n1; i++)L[i] = arr[left + i];for (int j = 0; j < n2; j++)R[j] = arr[mid + 1 + j];// 归并临时数组到 arr[left..right]int i = 0; // 初始化第一个子数组的索引int j = 0; // 初始化第二个子数组的索引int k = left; // 初始归并子数组的索引while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k] = L[i];i++;}else {arr[k] = R[j];j++;}k++;}// 拷贝 L[] 的剩余元素while (i < n1) {arr[k] = L[i];i++;k++;}// 拷贝 R[] 的剩余元素while (j < n2) {arr[k] = R[j];j++;k++;}
}// 归并排序函数
void MergeSort(vector<int>& arr, int left, int right) {if (left < right) {// 找到中间点int mid = left + (right - left) / 2;// 递归排序左半部分MergeSort(arr, left, mid);// 递归排序右半部分MergeSort(arr, mid + 1, right);// 合并已排序的两部分Merge(arr, left, mid, right);}void CountSort(vector<int>& v) {int n = v.size();int max = v[0];int min = v[0];for (int i = 0; i < n; i++) {if (v[i] < min)min = v[i];if (v[i] > max)max = v[i];}int range = max - min + 1;vector<int> count(range, 0);//统计每个元素出现的次数for (int num : v) {++count[num - min];}//输出int j = 0;for (int i = 0; i < range; i++) {while (count[i]) {v[j] = i + min;j++;count[i]--;}}
}

测试排序代码

#define  _CRT_SECURE_NO_WARNINGS
#include"sort.h"int main() {vector<int> v = { 3,5,1,4,2,7,6 };Print(v);//InsertSort(v);//ShellSort(v);//SelectSort(v);//BubbleSort(v);//HeapSort(v);//QuickSortTest(v);MergeSort(v, 0, 6);Print(v);}

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

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

相关文章

【机器学习】什么是决策树?

什么是决策树&#xff1f; 决策树是一种用于分类和回归问题的模型。它通过一系列的“决策”将数据逐步分裂&#xff0c;最终得出预测结果。可以把它看作是一个“树”&#xff0c;每个节点表示一个特征的判断&#xff0c;而每个分支代表了可能的判断结果&#xff0c;最终的叶子…

ZW3D二次开发_非模板表单_控件_添加回调

ZW3D的非模板表单的控件即“ZW3D Widgets”下的控件&#xff0c;常用的如“ZsCc::ComboBox”,"Zscc::ListWidget","ZsCc::MatrixPushButtons","Zscc::TableWidget"和"ZsCc::TreeView"等&#xff0c;使用它们时&#xff0c;ZW3D在内部实…

git 合并多次提交 commit

在工作中&#xff0c;有时候在反复修改代码中&#xff08;比如处理MR的检视意见&#xff0c;或者为了推送到测试环境&#xff0c;先 commit到自己的远程分支上&#xff09;不免会有多次 commit&#xff0c;这样发起 MR 的时候&#xff0c;就会有一堆 commit 信息&#xff0c;看…

【golang学习之旅】使用VScode安装配置Go开发环境

1. 下载并安装Go 1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量 2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode 3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl…

制作PaddleOCR/PaddleHub的Docker镜像

背景 在落地RAG知识库过程中&#xff0c;遇到了图文识别、图片表格内容识别的需求。但那时&#xff08;2024年4月&#xff09;各开源RAG项目还没有集成成熟的解决方案&#xff0c;经调研我选择了百度开源的PaddleOCR。支持国产&#xff01; 概念梳理 PaddleOCR 百度飞桨的OCR…

Mysql基本查询(上)

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 1. 创建&#xff08;create&#xff09; 全列插入 省略into插入 插入…

[工控机安全] 使用DriverView快速排查不可信第三方驱动(附详细图文教程)

导语&#xff1a; 在工业控制领域&#xff0c;设备驱动程序的安全性至关重要。第三方驱动可能存在兼容性问题、安全漏洞甚至恶意代码&#xff0c;威胁设备稳定运行。本文将手把手教你使用 DriverView工具&#xff0c;高效完成工控机驱动安全检查&#xff0c;精准识别可疑驱动&a…

Docker 镜像构建与优化

一、Dockerfile 构建镜像 1.1.拉取所需镜像 首先 docker pull 拉取一个 centos7 的镜像。 docker pull centos:7 下载 nginx 源码包。 官网&#xff1a;nginx: download wget https://nginx.org/download/nginx-1.26.3.tar.gz 1.2.解决 CentOS 7 安装源问题 因为原本的 …

PHP回调后门分析

什么是PHP回调后门&#xff1f; PHP回调后门是指攻击者利用PHP的回调函数等技术&#xff0c;绕过WAF&#xff08;Web应用防火墙&#xff09;&#xff0c;在受攻击的PHP应用程序中插入恶意代码。这种后门可以被用来执行任意PHP代码&#xff0c;例如访问数据库、执行系统命令、窃…

vue数据重置

前言 大家在开发后台管理系统的过程中&#xff0c;一定会遇到一个表格的条件查询重置功能吧&#xff0c;如果说查询条件少&#xff0c;重置起来还算是比较简单&#xff0c;如果元素特别多呢&#xff0c;那玩意写起来可遭老罪喽&#xff0c;那今天就给大家整一个如何快速重置数…

【js逆向入门】图灵爬虫练习平台 第九题

地址&#xff1a;aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12进入了debugger&#xff0c;右击选择一律不在此处暂停&#xff0c; 点击继续执行 查看请求信息 查看载荷&#xff0c;2个加密参数&#xff0c;m和tt 查看启动器&#xff0c;打上断点 进来 往…

OpenCV第2课 OpenCV的组成结构与图片/视频的加载及展示

1.OpenCV 的组成结构 2.OpenCV 的具体模块 3. 图像的读取 4. 视频的读取 1.OpenCV 的组成结构 OpenCV 是由很多模块组成的,这些模块可以分成很多层: 最底层是基于硬件加速层(HAL)的各种硬件优化。再上一层是opencv_contrib 模块所包含的OpenCV 由其他开发人员所贡献的代…

scNET:整合scRNA-seq和PPI用于学习基因和细胞的embedding

scRNA-seq 技术的最新进展为深入了解各种组织的异质性提供了前所未有的视角。然而&#xff0c;仅靠基因表达数据往往无法捕捉和识别细胞通路和复合物的变化&#xff0c;因为这些变化在蛋白质水平上更容易被察觉。此外&#xff0c;由于scRNA-seq数据存在高噪声水平和零膨胀等固有…

吴恩达机器学习笔记复盘(十一)逻辑回归的代价和损失函数

简介 逻辑回归是一种二分类算法&#xff0c;损失函数和代价函数和线性回归模型不同。目标是根据特征预测标签Y&#xff08;0或1&#xff09;。模型通过参数W和B拟合数据&#xff0c;但如何选择最优参数成为关键。本质上说线性回归的损失函数是对数值本身的误差平均值描述&…

ctfshow WEB web3

提示是一道php伪协议文件包含的题目&#xff0c;通过get传递的参数是 url 使用 Burp 抓包&#xff0c;发送给 Repeater 构造php伪协议&#xff0c;通过url传递 ?urlphp://input <?php system("pwd");?> 查看当前目录 <?php system("ls");?…

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…

word中指定页面开始添加页码

第一步&#xff1a; 插入页码 第二步&#xff1a; 把光标放到指定起始页码处 第三步&#xff1a; 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步&#xff1a; 设置页码格式&#xff0c;从1开始 第五步&#xff1a; 删掉不要的页码&#xff0c…

多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁

3月22日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;联合新华社新闻信息中心、上海外国语大学、外研在线等&#xff0c;发布全新升级的“万卷丝路2.0”多语言语料库&#xff0c;通过构建多语言开源数据底座&#xff0c;以人工智能赋能“一带一路”高质…

Windows桌面采集技术

在进入具体的方式讨论前&#xff0c;我们先看看 Windows 桌面图形界面的简化架构&#xff0c;如下图&#xff1a; 在 Windows Vista 之前&#xff0c;Windows 界面的复合画面经由 Graphics Device Interface&#xff08;以下简称 GDI&#xff09;技术直接渲染到桌面上。 在 Wi…

C# BULK INSERT导入大数据文件数据到SqlServer

BULK INSERT 的核心原理 BULK INSERT 是一种通过数据库原生接口高效批量导入数据的技术&#xff0c;其核心原理是绕过逐条插入的 SQL 解析和执行开销&#xff0c;直接将数据以二进制流或批量记录的形式传输到数据库。 在.NET中&#xff0c;主要通过 ​SqlBulkCopy 类​&#x…