C++数据排序( 附源码 )

一.冒泡排序

原理:自左向右依次遍历,若相邻两数顺序错误,则交换两数.

这样,每一轮结束后,最大/最小的数就会到最后.

Code:

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+1;
int n,a[N],in; 
void PrintArray(int a[],int n){for(int i=1;i<=n;i++){printf("%d ",a[i]);} 
} 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&a[i]); }for(int i=1;i<=n-1;i++){bool flag=true;for(int j=1;j<=n-1;j++){if(a[j]>a[j+1]) swap(a[j],a[j+1]),flag=false;} if(flag) break; } PrintArray(a,n);return 0;
}

我在此使用了函数.

二.选择排序

原理:自左向右依次遍历,选出最大/最小数,放到最前/最后

Code:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=1e5+1;
int n,a[N],in; 
void PrintArray(int a[],int n){for(int i=1;i<=n;i++){cout<<a[i]<<" "; } 
} 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&a[i]); }for(int i=1;i<=n-1;i++){in=i;for(int j=i+1;j<=n;j++){if(a[j]<a[in]){in=j; }			} swap(a[in],a[i]);} PrintArray(a,n);return 0;
}

函数与双指针搭配,非常好用!

三.桶排序

桶排序是最快的排序.

每个数都对应了一个桶,遍历查找,若有该数,桶为true,最后遍历输出(并无真正排序)

但无法创建过多桶(数组爆炸危机)

Code:

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+1;
int n,a[N],t,Max; 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&t);a[t]=1;Max=max(Max,t); } for(int i=1;i<=Max;i++){if(a[i]) cout<<i<<" "; } return 0;
}

但如果一个数有两个呢?如:2个2

升级:

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+1;
int n,a[N],t,Max; 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&t);a[t]++;Max=max(Max,t); } for(int i=0;i<=Max;i++){while(a[i]--) cout<<i<<" "; } return 0;
}

四.插入排序

插入排序,就是你打牌时摸牌并排序啦..

Code:

#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+1;
int n,a[N],in; 
void PrintArray(int a[],int n){for(int i=1;i<=n;i++){cout<<a[i]<<" "; } 
} 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&a[i]); }for(int i=2;i<=n;i++){int in=i-1,now=i;while(in>=1 and a[now]<a[in]){swap(a[now--],a[in--]);			 } } PrintArray(a,n);return 0;
}

还有许多排序,等你去探索...

五.归并排序

#include <cstdio>
#include <malloc.h>#define maxn 1000001int a[maxn];void Input(int n, int *a) {for(int i = 0; i < n; ++i) {scanf("%d", &a[i]);}
}void Output(int n, int *a) {for(int i = 0; i < n; ++i) {if(i)printf(" ");printf("%d", a[i]);}puts("");
}void MergeSort(int *nums, int l, int r) {int i, mid, p, lp, rp;int *tmp = (int *)malloc( (r-l+1) * sizeof(int) );    // (1)  if(l >= r) {return ;                                          // (2) }mid = (l + r) >> 1;                                   // (3) MergeSort(nums, l, mid);                              // (4) MergeSort(nums, mid+1, r);                            // (5) p = 0;                                                // (6) lp = l, rp = mid+1;                                   // (7) while(lp <= mid || rp <= r) {                         // (8) if(lp > mid) {tmp[p++] = nums[rp++];                        // (9) }else if(rp > r) {tmp[p++] = nums[lp++];                        // (10) }else {if(nums[lp] <= nums[rp]) {                    // (11) tmp[p++] = nums[lp++];}else {tmp[p++] = nums[rp++];}}}for(i = 0; i < r-l+1; ++i) {nums[l+i] = tmp[i];                               // (12) } free(tmp);                                            // (13) 
}int main() {int n;while(scanf("%d", &n) != EOF) {Input(n, a);MergeSort(a, 0, n-1);Output(n, a);}return 0;
} 

彩蛋:

求一数是否是完全平方数(int范围内)

bool sq(int a){return int(sqrt(a))*int(sqrt(a))==a;
} 

需导入cmath头文件!

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

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

相关文章

I2C 读写 AT24C02

根据AT24C02的 Datasheet 可知AT24C02有2K bit&#xff0c;即256B&#xff0c;分为32页,每页8个字节&#xff0c;结合数据手册和原理图可以得知&#xff0c;板载AT24C02的读地址为0xA2&#xff0c;写地址为0xA3&#xff1a; #define AT24C02_ADDR_WRITE 0xA2 #define AT24C02_…

K8S学习之基础七十四:部署在线书店bookinfo

部署在线书店bookinfo 在线书店-bookinfo 该应用由四个单独的微服务构成&#xff0c;这个应用模仿在线书店的一个分类&#xff0c;显示一本书的信息&#xff0c;页面上会显示一本书的描述&#xff0c;书籍的细节&#xff08;ISBN、页数等&#xff09;&#xff0c;以及关于这本…

Linux 查找文本中控制字符所在的行

参考资料 ASCIIコード表 目录 一. 业务背景二. 遇到的问题三. 分析3.1 url编码的前置知识3.2 出现控制字符的transactionid分析3.3 16进制分析 四. 从文本中查找控制字符所在的行五. 控制字符一览 一. 业务背景 ⏹在项目中&#xff0c;业务请求对应着下URL http://www.test.…

python将pdf文件转为图片,如果pdf文件包含多页,将转化的多个图片通过垂直或者水平合并成一张图片

要将PDF文件转换为图片&#xff0c;并将多页PDF垂直合并成一张图片&#xff0c;可以使用PyMuPDF&#xff08;也称为fitz&#xff09;库来读取PDF文件&#xff0c;并使用Pillow库来处理和合并图片。以下是一个示例代码&#xff0c;展示了如何实现这个功能&#xff1a; 首先&…

HarmonyOS 基础组件和基础布局的介绍

1. HarmonyOS 基础组件 1.1 Text 文本组件 Text(this.message)//文本内容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字体大小.maxLines(1)// 最大行数.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出显示....fontColor(Color.Black).…

FrameWork基础案例解析(四)

文章目录 单独拉取framework开机与开机动画横屏Android.mk语法单独编译SDKmake 忽略warning单独修改和编译Camera2单独编译Launcher3Android Studio 导入、修改、编译Settings导入 Android Studio 导入、修改、编译Launcher3android 开机默认进入指定Launcher植入自己的apk到系…

基于vscode(GDB)调试ros2节点

一、环境准备 必备vscode插件 1&#xff09;Docker Docker - Visual Studio Marketplace 2&#xff09;Dev Containers Dev Containers - Visual Studio Marketplace 3&#xff09;GDB GDB Debug - Visual Studio Marketplace 二、进去docker镜像 1&#xff09;docker安…

基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展&#xff0c;我们国家和世界都已经进入了互联网大数据时代&#xff0c;计算机网络已经成为了整个社会以及经济发展的巨大动能&#xff0c;考研成绩查询管理事务现在已经成为社会关注的重要内容&#xff0c;因此运用互联网技术来提高考研成绩…

C++:算术运算符

程序员Amin &#x1f648;作者简介&#xff1a;练习时长两年半&#xff0c;全栈up主 &#x1f649;个人主页&#xff1a;程序员Amin &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全…

PyQt6实例_A股日数据维护工具_使用

目录 前置&#xff1a; 下载预备更新的数据 使用工具更新 用工具下载未复权、前复权、权息数据 在PostgreSQL添加两个数据表 工具&视频 前置&#xff1a; 1 本系列将以 “PyQt6实例_A股日数据维护工具” 开头放置在“PyQt6实例”专栏 2 日数据可在“数据库”专栏&…

REST 方法

FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…

QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理

目录 1.简介 2.原理概述 3.实现分析 3.1.通过方法名调用方法的实现分析 3.2.通过可调用对象调用方法的实现分析 4.使用场景 5.总结 1.简介 QMetaObject::invokeMethod 是 Qt 框架中的一个静态方法&#xff0c;用于在运行时调用对象的成员函数。这个方法提供了一种动态调…

Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发

Unity3D 交互式AI桌面宠物开发系列【三】ASR 语音识别 该系列主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲有关于…

Java 状态模式 详解

状态模式详解 一、状态模式概述 状态模式(State Pattern)是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为&#xff0c;使对象看起来似乎修改了它的类。 核心特点 状态封装&#xff1a;将每个状态的行为封装到独立的类中状态转换&#xff1a…

Nginx 配置 HTTPS 与 WSS 完整指南

Nginx 配置 HTTPS 与 WSS 完整指南 本教程将手把手教你如何为网站配置 HTTPS 加密访问&#xff0c;并通过反向代理实现安全的 WebSocket&#xff08;WSS&#xff09;通信。以 https://www.zhegepai.cn 域名为例&#xff0c;完整流程约需 30 分钟完成。 一、前置准备 1.1 域名…

双向链表的理解

背景 代码中经常会出现双向链表&#xff0c;对于双向链表的插入和删除有对应的API函数接口&#xff0c;但直观的图表更容易理解&#xff0c;所以本文会对rt-thread内核代码中提供的双向链表的一些API函数操作进行绘图&#xff0c;方便后续随时查看。 代码块 rt-thread中提供…

大文件上传源码,支持单个大文件与多个大文件

大文件上传源码&#xff0c;支持单个大文件与多个大文件 Ⅰ 思路Ⅱ 具体代码前端--单个大文件前端--多个大文件前端接口后端 Ⅰ 思路 具体思路请参考我之前的文章&#xff0c;这里分享的是上传流程与源码 https://blog.csdn.net/sugerfle/article/details/130829022 Ⅱ 具体代码…

Unity中的静态合批使用整理

静态批处理是一种绘制调用批处理方法&#xff0c;它组合不移动的网格以减少绘制调用。它将组合的网格转换为世界空间&#xff0c;并为它们构建一个共享顶点和索引缓冲区。然后&#xff0c;对于可见网格&#xff0c;Unity 会执行一系列简单的绘制调用&#xff0c;每个调用之间几…

【机器学习中的基本术语:特征、样本、训练集、测试集、监督/无监督学习】

机器学习基本术语详解 1. 特征&#xff08;Feature&#xff09; 定义&#xff1a;数据的属性或变量&#xff0c;用于描述样本的某个方面。作用&#xff1a;模型通过学习特征与目标之间的关系进行预测。示例&#xff1a; 预测房价时&#xff0c;特征可以是 面积、地段、房龄。…

C++学习之路:指针基础

目录 指针介绍与基本用法双重指针函数指针空指针与野指针函数参数的指针传递最后 指针一般在C/C语言学习的后期接触&#xff0c;这样就导致指针给新手一种高深莫测、难以掌握的刻板印象。但实际上指针的使用很简单&#xff0c;并且还能够极大的提高程序的灵活性&#xff0c;帮助…