排序(快速排序,归并排序,插入排序,选择排序,冒泡排序,希尔排序,堆排序)

给定你一个长度为 n

的整数数列。

请你对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数 n

第二行包含 n

个整数(所有整数均在 1∼109

范围内),表示整个数列。

输出格式

输出共一行,包含 n

个整数,表示排好序的数列。

数据范围

1≤n≤100000

输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

 代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 100010;
int n;
int q[N];
int sz,w[N];    //merge_sort
void inser_sort()   //直接插入排序   n^2   TLE
{for(int i=1;i<n;i++)            //遍历每一个位置{if(q[i-1]<=q[i]) continue;int t=q[i],j=i;while(q[j-1]>t&&j!=0)         //如果后面的数t大于前面的,则后面的数t往前移,直到遍历到没有比t大的位置时停止{q[j]=q[j-1];j--;}q[j]=t;}
}
void binary_search_insert_sort()    //折半插入排序  n^2    TLE
{for(int i=1;i<n;i++){if(q[i-1]<=q[i]) continue;      int t=q[i];int l=0,r=i-1;    //二分查找while(l<r)                  //找到l=r的位置,q[l]>=t{int mid=(l+r)/2;                //下取整,要得到的在l左边if(q[mid]>t) r=mid;         else l=mid+1;}for(int j=i-1;j>=l;j--) q[j+1]=q[j];q[l]=t;}
}
void bubble_sort()              //冒泡排序
{for(int i=0;i<n-1;i++)      //排n-1次{bool has_swap=false;                //优化for (int j=n-1; j>i; j-- )          //从后往前,找到i个小的数if(q[j]<q[j-1]){swap(q[j],q[j-1]);has_swap=true;}if(!has_swap) break;                //如果没有交换,说明已经有序}
}
void select_sort()          //简单选择排序,每次选择出第i小的数到到第i位置
{for(int i=0;i<n-1;i++){int k=i;                //用k记录最小数的位置for(int j=i+1;j<n;j++) if(q[j]<q[k])k=j;swap(q[i],q[k]);}
}
void shell_sort()   //希尔排序
{for(int d=n/3;d;d= d==2?1:d/2)      //d个一组,找d{for(int start=0;start<d;start++)    //对每一组进行遍历{for(int i=start+d;i<n;i+=d)     //划分每一组,进行组内直接插入排序,从前往后遍历{int t=q[i],j=i;while(j!=start&&q[j-d]>t){q[j]=q[j-d];j-=d;}q[j]=t;}}}
}
void quick_sort(int l,int r)        //快速排序
{if(l>=r) return;int i=l-1,j=r+1,x=q[(l+r)/2];       //选取分组中间的数作为基数while(i<j){do i++;while(q[i]<x);do j--;while(q[j]>x);if(i<j) swap(q[i],q[j]);}quick_sort(l,j);            //此时必须写j,否则[0,1]边界死循环    //写i要改成i-1,i  x=q[(l+r+1)/2]或者q[r]quick_sort(j+1,r);
}
void down(int u)
{int t=u;if(u*2<=sz&&q[u*2]>q[t]) t=u*2;if(u*2+1<=sz&&q[u*2+1]>q[t]) t=u*2+1;if(u!=t){swap(q[u],q[t]);down(t);}
}
void heap_sort()        //堆排序,下标一定要从1开始
{sz=n;for(int i=n/2;i;i--) down(i);for(int i=0;i<n-1;i++){swap(q[1],q[sz]);sz--;down(1;)}
}
void merge_sort(int l,int r)        //二路归并排序
{if(l>=r) return;int mid=(l+r)/2;merge_sort(l,mid),merge_sort(mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r)     //双指针算法{if(q[i]<=q[j]) w[k++]=q[i++];else w[k++]=q[j++];}while(i<=mid) w[k++]=q[i++];        //如果[mid+1,r]区间都小于[i,mid],这时将[i,mid]区间拼接到后面while(j<=r) w[k++]=q[j++];        //如果[l,mid]区间都小于[j,r]区间,则将[j,r]拼接到后面for(i=l,j=0;j<k;i++,j++) q[i]=w[j];
}
int main()
{scanf("%d", &n);for(int i=0;i<n;i++){scanf("%d", &q[i]);}// inser_sort();// binary_search_insert_sort();// bubble_sort();// select_sort();// shell_sort();// quick_sort(0,n-1);// heap_sort();merge_sort(0,n-1);for(int i=0;i<n;i++) printf("%d ",q[i]);return 0;
}

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

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

相关文章

数学建模—分类模型

本讲将介绍分类模型。对于而分类模型&#xff0c;我们将介绍逻辑回归&#xff08;logistic regression&#xff09;和Fisher线性判别分析两种分类算法&#xff1b;对于多分类模型&#xff0c;我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤下。 本题按水…

基于 JMeter API 开发性能测试平台

目录 背景&#xff1a; 常用的 JMeter 类和功能的解释&#xff1a; JMeter 编写性能测试脚本的大致流程示意图&#xff1a; 源码实现方式&#xff1a; (1) 环境初始化 (2) 环境初始化 (3) 创建测试计划 (4) 创建 ThreadGroup (5) 创建循环控制器 (6) 创建 Sampler (…

探索 TypeScript 元组的用例

元组扩展了数组数据类型的功能。使用元组&#xff0c;我们可以轻松构造特殊类型的数组&#xff0c;其中元素相对于索引或位置是固定类型的。由于 TypeScript 的性质&#xff0c;这些元素类型在初始化时是已知的。使用元组&#xff0c;我们可以定义可以存储在数组中每个位置的数…

【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C初阶之路⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 类和对象 1. 前言2. 初始化列表2.1初始化列表的作用…

MyCat配置rule.xml、server.xml讲解

1. rule.xml分片规则配置文件 rule.xml中配置的主要就是拆分表的规则&#xff0c;rule.xml中主要包含两类标签 tableRule 和Function。 tableRule标签里面主要配置我们的分片规则&#xff0c;Function里面涉及的是分片规则里面所涉及的java类&#xff0c;都是在function中配置…

原生js发送ajax请求---ajax请求篇(一)

在原生js中我们使用的是XMLHttpRequest对象来发送ajax请求 主要步骤就是&#xff1a; 1.创建XMLHTTPRequest对象 2.使用open方法设置和服务器的交互信息 3.设置发送的数据&#xff0c;开始和服务器端交互 4.注册事件 5.更新界面 &#xff08;1&#xff09; get方式 //步骤一…

GIT-HUB上传大文件.docx

下载git Github上传大文件&#xff08;&#xff1e;25MB&#xff09;教程_UestcXiye的博客-CSDN博客 上传流程 https://blog.csdn.net/weixin_35770067/article/details/116564429?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Ed…

Grafana集成prometheus(1.Prometheus安装)

下载docker镜像 docker pull prom/prometheus docker pull prom/node-exporter启动 node-exporter 该程序用以采集机器内存等数据 启动脚本 docker run -d -p 9100:9100 prom/node-exporter ss -anptl | grep 9100启动截图 prometheus 启动脚本 # 3b907f5313b7 为镜像i…

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…

[保研/考研机试] 括号匹配问题 C++实现

题目描述&#xff1a; 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母&#xff1b;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序&#xff0c;找到无法匹配的左括号和右括号&#xff0c;输出原来的字符串&am…

CS 144 Lab Four -- the TCP connection

CS 144 Lab Four -- the TCP connection TCPConnection 简述TCP 状态图代码实现完整流程追踪 测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Four 对应的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 简述 TCPConnection 需要…

利用Jmeter做接口测试全流程分析

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。这篇文章就来介绍一下如何利用Jmeter做接口测试的流程&#xff0c;主要针对的是功能测试。暂不涉及到自动化测试和性能测试的内容。 一把来说&…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…

阿里云轻量应用服务器_2核2G3M_108元/年_性能测评

阿里云轻量应用服务器2核2G3M带宽108元一年&#xff0c;系统盘为50GB高效云盘&#xff1b;轻量服务器2核4G4M带宽&#xff0c;60GB高效云盘297.98元12个月。目前轻量应用服务器只有2核2G和2核4G有活动&#xff0c;阿里云百科分享阿里云轻量应用服务器入口&#xff1a; 目录 阿…

Flume拦截器

实现 Interceptor接口 方法1 是初始化: 方法2和3重载 拦截: 方法3 是关闭: 但是flume是通过内部类创建对象的

mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…

springboot第34集:ES 搜索,nginx

#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…

ardupilot 三维向量如何进行旋转

目录 文章目录 目录摘要1.三维向量的旋转2.如何理解上面公式3.ardupilot中代码应用4.结论摘要 本节主要记录ardupilot中如何实现一个三维向量从一个坐标系转换到另外一个坐标系的过程,欢迎批评指正!!! 1.三维向量的旋转 这里需要特别注意,我们有时候需要把R系往B系转换,…

每天一个知识点——Normalization

这里结合大模型的学习&#xff0c;主要分析Layer Norm、RMS Norm和Deep Norm的异同&#xff0c;与此同时&#xff0c;究竟是在之前执行Normalization&#xff08;Pre-Norm&#xff09;还是之后执行&#xff08;Post-Norm&#xff09;&#xff0c;也是一个比较喜欢拿来讨论的知识…

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言1.1 机器学习的定义1.2 重要性和应用场景重要性应用场景 2. 机器学习的早期历史2.1 初期理论与算法感知机决策树 2.2 早期突破支持向量机神经网络初探 3. 21世纪初期的发展3.1 集成学习方法随机森林XGBoost 3.2 深度学习的崛起卷积神经网络&#xff08;CNN&…