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

给定你一个长度为 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.mzph.cn/news/30563.shtml

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

相关文章

Opencv-C++笔记 (14) : 霍夫变换(直线、圆)

文章目录 一、霍夫变换-直线1.1霍夫变换-直线 原理详解 二、霍夫圆检测 一、霍夫变换-直线 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 1、平面空间&#xff08;x,y&#xff09;到极坐标空间转换&#xff1b; 2、对极坐标进行变换&#xff0c;转化为…

[mongo]应用场景及选型

应用场景及选型 MongoDB 数据库定位 OLTP 数据库横向扩展能力&#xff0c;数据量或并发量增加时候架构可以自动扩展灵活模型&#xff0c;适合迭代开发&#xff0c;数据模型多变场景JSON 数据结构&#xff0c;适合微服务/REST API基于功能选择 MongoDB 关系型数据库迁移 从基…

【Android】MVC,MVP,MVVM三种架构模式的区别

MVC 传统的代码架构模式&#xff0c;仅仅是对代码进行了分层&#xff0c;其中的C代表Controller&#xff0c;控制的意思 将代码划分为数据层&#xff0c;视图层&#xff0c;控制层&#xff0c;三层之间可以任意交互 MVP MVP是在MVC基础上改进而来的一种架构&#xff0c;其中的…

【图像去噪】基于原始对偶算法优化的TV-L1模型进行图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++入门--string类的实现

目录 1.string类常用函数实现&#xff08;1&#xff09;string类成员变量定义&#xff08;2&#xff09; string类默认构造函数实现&#xff08;3&#xff09; string类拷贝构造函数实现&#xff08;4&#xff09;string类析构函数&#xff08;5&#xff09;string类c_str()函数…

品牌宣传与媒体传播是声誉管理的主要方式之一

企业声誉是现如今影响品牌信任度、客户忠诚度的重要因素&#xff0c;也被视为企业的一种无形资&#xff0c;更影响着企业未来的发展。因此&#xff0c;企业声誉管理也日渐成为企业管理的重要课题之一&#xff0c;尤其在品牌营销管理领域。 什么是声誉管理&#xff1f;声誉管理有…

logstash 采集 docker 日志

1、nginx容器部署 参考&#xff1a;nginx容器部署 将容器内的nginx日志文件映射到宿主机/home/logs/nginx目录下 注意&#xff1a;并且需要需要将日志的输出格式修改为json 2、编辑vim /opt/logstash-7.4.2/config/nginx-log-es.conf 文件&#xff0c;收集docker nginx容器日…

Java训练五

一、跳动的心脏 心脏是动物的重要器官&#xff0c;不断跳动的心脏意味着鲜活的生命力。现在创建一个人类&#xff0c;把心脏类设计为人类里面的一个成员内部类。心脏类有一个跳动的方法&#xff0c;在一个人被创建时&#xff0c;心脏就开始不断地跳动。 package haha; publi…

Spring集成Seata

Seata的集成方式有&#xff1a; 1. Seata-All 2. Seata-Spring-Boot-Starter 3. Spring-Cloud-Starter-Seata 本案例使用Seata-All演示&#xff1a; 第一步&#xff1a;下载Seata 第二步&#xff1a;为了更好看到效果&#xff0c;我们将Seata的数据存储改为db 将seata\sc…

Vue3 —— to 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码&#xff1a; toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数&#xff0c;第一个是 响应式对象…

嘉楠勘智k230开发板上手记录(四)--HHB神经网络模型部署工具

按照K230_AI实战_HHB神经网络模型部署工具.md&#xff0c;HHB文档&#xff0c;RISC-V 编译器和模拟器安装来 一、环境 1. 拉取docker 镜像然后创建docker容器并进入容器 docker pull hhb4tools/hhb:2.4.5 docker run -itd --namehhb2_4 -p 22 "hhb4tools/hhb:2.4.5"…

【CSS】背景图定位问题适配不同机型

需求 如图, 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 , 需要适配不同的机型, 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的, 所以飘带和渐变背景实则两个div 飘带切图如下 , 圆形部分需要契合头像 <view class"box-bg"><…

Linux ——实操篇

Linux ——实操篇 前言vi 和 vim 的基本介绍vi和vim常用的三种模式正常模式插入模式命令行模式 vi和vim基本使用各种模式的相互切换vi和vim快捷键关机&重启命令基本介绍注意细节 用户登录和注销基本介绍使用细节 用户管理基本介绍添加用户基本语法应用案例细节说明 指定/修…

获取接口的所有实现

一、获取接口所有实现类 方法1&#xff1a;JDK自带的ServiceLoader实现 ServiceLoader是JDK自带的一个类加载器&#xff0c;位于java.util包当中&#xff0c;作为 A simple service-provider loading facility。 &#xff08;1&#xff09;创建接口 package com.example.dem…

Springboot中拦截GET请求获取请求参数验证合法性

目录 目的 核心方法 完整代码 创建拦截器 注册拦截器 测试效果 目的 在Springboot中创建拦截器拦截所有GET类型请求&#xff0c;获取请求参数验证内容合法性防止SQL注入&#xff08;该方法仅适用拦截GET类型请求&#xff0c;POST类型请求参数是在body中&#xff0c;所以下面…

3.1 计算机网络和网络设备

数据参考&#xff1a;CISP官方 目录 计算机网络基础网络互联设备网络传输介质 一、计算机网络基础 1、ENIAC&#xff1a;世界上第一台计算机的诞生 1946年2月14日&#xff0c;宾夕法尼亚大学诞生了世界上第一台计算机&#xff0c;名为电子数字积分计算机&#xff08;ENIAC…

【Autolayout案例02-距离四周边距 Objective-C语言】

一、好,来看第二个案例 1.第二个案例,是什么意思呢,第二个案例,要求屏幕中间,有一个UIView UIView,是个红色的UIView UIView的大小,我不限定 但是无论你是什么屏幕下 这个UIView距离上边,始终是50 距离右边,始终是50, 距离下边,始终是50, 距离左边,始终是5…

Nginx跳转模块——location与rewrite

一、location 1、location作用 用于匹配uri&#xff08;文件、图片、视频&#xff09; uri&#xff1a;统一资源标识符。是一种字符串标识&#xff0c;用于标识抽象的或物理资源文件、图片、视频 2、locatin分类 1、精准匹配&#xff1a;location / {...} 2、一般匹配&a…

PROFINET转DeviceNet网关普通网线能代替profinet吗

捷米JM-DNT-PN这款神器&#xff0c;连接PROFINET和DeviceNet网络&#xff0c;让两边数据轻松传输。 这个网关不仅从ETHERNET/IP和DEVICENET一侧读写数据&#xff0c;还可以将缓冲区数据交换&#xff0c;这样就可以在两个网络之间愉快地传递数据了&#xff01;而且&#xff0c;…

虚幻引擎游戏开发过程中,游戏鼠标如何双击判定?

UE虚幻引擎对于游戏开发者来说都不陌生&#xff0c;市面上有47%主机游戏使用虚幻引擎开发游戏。作为是一款游戏的核心动力&#xff0c;它的功能十分完善&#xff0c;囊括了场景制作、灯光渲染、动作镜头、粒子特效、材质蓝图等。本文介绍了虚幻引擎游戏开发过程中游戏鼠标双击判…