十大排序|十大排序

 稳定排序:冒泡排序、插入排序、归并排序、基数排序、桶排序

不稳定排序:选择排序、快速排序、希尔排序、堆排序

二、插入排序:

代码:

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;int i, j;for (i = 1; i < n; i++){if (A[i] < A[i - 1])//i为要检查的元素,要和前面的有序序列(从小到大){int temp = A[i];//哨兵位for (j = i - 1; j >=0; j--)//和有序队列的每一位元素进行比较,插入合适的位置{if (A[j] > temp){A[j + 1] = A[j];//j移到j+1的位置,都往后挪一位break;}}A[j+1] = temp;//最后一个元素是j+1,为什么,因为可能到-1}}for (int j = 0; j < n; j++){cout <<A[j] << endl;}return 0;
}

三、希尔排序

在插入排序的基础上

 

 

 

 这里王道讲的代码,有n个数的话实际上留了n+1位,第一位空着做哨兵位。我对数组修改

 

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;//留第一个位置做哨兵位int i, j;for (int d = n / 2; d >= 1; d = d / 2)//每一趟d都进行缩小{for (i = d; i <n;i++)//注意是从d开始{if (A[i] < A[i - d])//说明可以插入的有序队列,这个if到下面的逻辑基本是插入排序,找到一个合适的位置插入,其余往后移动{int temp = A[i];for (j = i - d; j >=0 && temp< A[j]; j = j - d){A[j+d] = A[j];}A[j + d] = temp;}}}for (int j = 0; j < n; j++){cout << A[j] << endl;}return 0;
}

 三、冒泡排序(相邻位置元素进行比较和swap,直到把最大的元素“冒”到最后)


#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;
void swap(int *a, int *b)
{int temp = *a;*a= *b;*b = temp;}void Swap1(int& x, int& y)
{int temp = x;x = y;y = temp;
}int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;for (int i = 0; i < n-1; i++){bool flag = false;for (int j =0; j < n -1-i; j++){if (A[j] > A[j + 1]){Swap1(A[j], A[j+1]);flag = true;}}if (flag == false)//代表一次都没有发生交换,说明数组有序,可以停止比较了{break;}}for (int j = 0; j < n; j++){cout << A[j] << endl;}return 0;
}

 

快速选择排序------------------基于交换排序,前序遍历构建树,枢轴,

 

 

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;//类似前序遍历构建树//1、找到枢轴的位置
int Partition(int A[], int low, int high)
{int base = A[low];while (low < high){while (low <high && A[high] >= base){high--;}A[low] = A[high];while (low < high && A[low] <= base){low++;}A[high] = A[low];}A[low] = base;return low;
}//前序遍历构建树
void QuickSort(int A[], int low, int high)
{if (low < high){int root_index = Partition(A, low, high);QuickSort(A, low, root_index - 1);QuickSort(A, root_index + 1, high);}}int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;for (int i=0;i<n;i++){cout << A[i] << " ";}cout << endl;QuickSort(A, 0, n - 1);for (int i = 0; i < n; i++){cout << A[i] << " ";}cout << endl;return 0;
}

 

 

 简单选择排序

 

 

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;void Swap3(int& a, int& b)
{int temp = a;a = b;b = temp;
}int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;for (int i = 0; i < n - 1; i++){int minn = i;for (int j = i + 1; j < n; j++){if (A[j]<A[minn]){minn = j;}}if (minn != i){Swap3(A[i], A[minn]);}}for (int j = 0; j < n; j++){cout << A[j] << endl;}return 0;
}

归并排序:

 

 

 

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
using namespace std;//借助辅助数组
vector<int>B;
void Merge(int A[],int low,int mid,int high)
{int k = low,i=low,j=mid+1;while(i <= mid && j <= high){if (A[i] < A[j]){B[k++] = A[i++];}else{B[k++] = A[j++];}}while (i <= mid){B[k++] = A[i++];}while (k <= high){B[k++] = A[j++];}for (k = low; k <= high; k++){A[k] = B[k];}
}void MergeSort(int A[], int low, int high)
{if (low < high){int mid = low + (high - low) / 2;MergeSort(A, low, mid);MergeSort(A, mid+1,high);Merge(A, low, mid, high);}}int main()
{int A[6] = { 4,5,6,3,2,1 };int n = 6;B.resize(n);MergeSort(A, 0, n - 1);for (int i = 0; i < n; i++){cout << A[i] << "  ";}cout << endl;return 0;
}

 

基数排序:

桶排序:

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

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

相关文章

NLP实战9:Transformer实战-单词预测

目录 一、定义模型 二、加载数据集 三、初始化实例 四、训练模型 五、评估模型 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 模型结构图&#xff1a; &a…

Apikit 自学日记:API 异常监控-创建 API 监控

如何在apikit中&#xff0c;创建 API 监控呢&#xff1f; 创建并开启监控API 一、手动创建监控API Eolink API 网络监控平台支持从 Eolink API Management&#xff08;API管理产品&#xff09;中导入API信息&#xff0c;或者手动创建监控API。 进入API监控页面&#xff0c;点击…

个人中心 - 实现修改用户头像、用户名或密码

目录 1. 修改用户头像 1.1 获取原来的用户头像和用户名 1.2 实现保存头像 2. 修改用户名或密码 1. 修改用户头像 本文是针对之前的一篇项目博客 - 博客系统 做的一个扩展功能. 1.1 获取原来的用户头像和用户名 想要修改头像, 那么就得先获取数据库中原来的头像, 此处顺便…

mysql进阶-修改linux服务器中MySQL的字符集

1.背景 linux中mysql8默认的字符集是latin1&#xff0c;在插入中文时会报错&#xff0c;所以一般在配置好mysql时需要修改字符集为utf8【又叫utfmb3,一般开发够用&#xff0c;一个字符用3个字节表示】或者utfmb4【一个字符用4个字节表示&#xff0c;如果存储emoji表情&#xf…

容器部署jenkins定时构建于本地时间不一致

1. Dockerfile FROM jenkins/jenkins:2.411-jdk11 USER root #以下生成密钥方式为旧格式&#xff0c;因为新格式暂不能被"Publish over SSH--->Jenkins SSH Key"功能识别 RUN ssh-keygen -q -m PEM -t rsa -b 2048 -N -f /root/.ssh/id_rsa ADD ./apache-maven…

【uniapp】实现买定离手小游戏

前言 最近玩了一个小游戏&#xff0c;感觉挺有意思&#xff0c;打算放进我的小程序【自动化小助手】里面&#xff0c;“三张押一张&#xff0c;专押花姑娘&#xff01;”&#xff0c;从三张卡牌&#xff0c;挑选一张&#xff0c;中奖后将奖励进行发放&#xff0c;并且创建下一…

减轻 PWM 的滤波要求

经典脉宽调制器 (PWM) 发出 H 个连续逻辑高电平&#xff08;1&#xff09;&#xff0c;后跟 L 个连续逻辑低电平&#xff08;0&#xff09;的重复序列。每个高电平和低电平持续一个时钟周期 T 1/F (Hz)。结果的占空比可定义为 H/N&#xff0c;其中 N HL 时钟周期。N 通常是 2…

【面试】某公司记录一次面试题

文章目录 框架类1. Spring boot与 spring 架相比&#xff0c;好在哪里?2. Spring boot以及 Spring MVC 常用注解(如requestingMapping&#xff0c;responseBody 等)3. 常用的java 设计模式&#xff0c;spring 中用到哪些设计模式4. SpringIOC是什么&#xff0c;如何理解5. AOP…

设计模式之外观模式

外观模式 本质&#xff1a; 封装交互&#xff0c;简化调用 何时使用外观模式 相关模式 外观模式经典代码&#xff1a; package com.tao.design.facade;/*** projectName: DesignMode* package: com.tao.design.facade* className: ServiceA* author: TT_Hugo* description…

替换linux的文泉驿正黑fonts-wqy-zenhei字体 替换linux默认中文字体

WSL 怎么替换 linux 的文泉驿正黑 fonts-wqy-zenhei 字体 WSL 怎么替换 linux 默认中文字体 在 wsl 中默认是没有 gnome 界面或者 xface 的&#xff0c;但是我需要使用 wsl 开发 electron 或者使用 chrome 浏览器。这个时候系统就会调用默认的系统字体了。 我使用的是 debian…

Android 9系统源码_音频管理(一)按键音效源码解析

前言 当用户点击Android智能设备的按钮的时候&#xff0c;如果伴随有按键音效的话&#xff0c;会给用户更好的交互体验。本期我们将会结合Android系统源码来具体分析一下控件是如何发出按键音效的。 一、系统加载按键音效资源 1、在TV版的Android智能设备中&#xff0c;我们…

Linux - gcc/g++工具使用

gcc/g是用于编译C/C程序的编译器 1.编译过程 1. 预处理&#xff08;头文件展开&#xff0c;条件编译&#xff0c;进行宏替换&#xff0c;去注释等) 2. 编译&#xff08;C语言汇编语言) 3. 汇编&#xff08;汇编->可重定位目标二进制文件&#xff0c;不可以被执行的&#xff…

【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”

1 指令微调数据集形式“花样”太多 大家有没有分析过 prompt对模型训练或者推理的影响&#xff1f;之前推理的时候&#xff0c;发现不加训练的时候prompt&#xff0c;直接输入模型性能会变差的&#xff0c;这个倒是可以理解。假如不加prompt直接训练&#xff0c;是不是测试的时…

kafka集群搭建(Linux环境)

zookeeper搭建&#xff0c;可以搭建集群&#xff0c;也可以单机&#xff08;本地学习&#xff0c;没必要搭建zookeeper集群&#xff0c;单机完全够用了&#xff0c;主要学习的是kafka&#xff09; 1. 首先官网下载zookeeper&#xff1a;Apache ZooKeeper 2. 下载好之后上传到…

IP 监控软件

IP 监控软件可帮助管理员主动监控网络资源。随着各种设备连接到网络&#xff0c;监控设备和接口可能很复杂&#xff0c;为管理员提供这些设备的IP监控&#xff0c;了解其各种性能指标和问题。 使用有效的 IP 监控软件的优势 使用有效的 IP 监控系统和一套全面的 IP 监控工具&…

qt子进程和父进程读写数据通信

进程A&#xff08;例如主程序&#xff09;创建了一个QProcess B&#xff0c;这个B就称为A的子进程&#xff0c;而A称为B的父进程。 这也称为进程间通信&#xff0c;有多种方式&#xff1a; TCP/IPLocal Server/Socket共享内存D-Bus &#xff08;Unix库&#xff09;QProcess会…

Moonbeam:开发者的多链教科书

了解波卡的技术架构&#xff0c;只需掌握3个关键词&#xff1a; Relay Chain&#xff08;中继链&#xff09;&#xff1a;Polkadot将自身视作多核计算机&#xff0c;承载区块链底层安全架构的辐射中心。Parachain&#xff08;平行链&#xff09;&#xff1a;在“Layer 0”架构…

Postman如何导出接口的几种方法

本文主要介绍了Postman如何导出接口的几种方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 前言&#xff1a; 我的文章还是一贯的作风&#xff0c;简确用风格&#xff08;简单确实有用&#xff09;&am…

【从零开始学习JAVA | 三十四篇】IO流

目录 前言&#xff1a; IO流介绍&#xff1a; IO流的常见方法&#xff1a; 1.字节流类&#xff1a; 2.字符流类&#xff1a; 总结&#xff1a; 前言&#xff1a; IO流就是存入和读取数据的解决方案&#xff0c;并且他是一个知识点很多的章节&#xff0c;因此我们关于IO流…

Jmeter —— jmeter接口自动化测试操作流程

在企业使用jmeter开展实际的接口自动化测试工具&#xff0c;建议按如下操作流程&#xff0c; 可以使整个接口测试过程更规范&#xff0c;更有效。 接口自动化的流程&#xff1a; 1、获取到接口文档&#xff1a;swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…