四个超常用排序算法代码

Java常用排序算法 阅读详情

按数组大小限制100000来算。

#include <bits/stdc++.h>

using namespace std;

int n;
int a[100009];
int b[100009];
int h[100009];

void selection_sort () {
	for (int i = 1; i <= n; i++) {
		int mn = a[i];
		int mi = i;
		for (int j = i + 1; j <= n; j++)
			if (mn > a[j]) {
				mn = a[j];
				mi = j;
			}
		swap (a[mi], a[i]);
	}
}

void bubble_sort () {
	for (int i = 1; i < n; i++)
		for (int j = 1; j < n; j++)
			if (a[j] > a[j + 1])
				swap (a[j], a[j + 1]); 
}

void optimized_bubble_sort () {
	for (int i = 1; i < n; i++) {
		bool p = false;
		for (int j = 1; j <= n - i; j++)
			if (a[j] > a[j + 1]) {
				swap (a[j], a[j + 1]);
				p = true;
			}
		if (!p) break;
	}
}

void insert_sort1 () {
	for (int i = 2; i <= n; i++) {
		int cnt = 1;
		while (a[i - cnt + 1] < a[i - cnt]) {
			swap (a[i - cnt + 1], a[i - cnt]);
			cnt++;
		}
	}
}

void insert_sort2 () {
	for (int i = 2; i <= n; i++)
		for (int j = i; j >= 2; j--) {
			if (a[j] < a[j - 1]) swap (a[j], a[j - 1]);
			else break;
		}
}

void counting_sort () {
	int mx = -2e9;
	int mn = 2e9;
	for (int i = 1; i <= n; i++) {
		h[a[i]]++;
		mx = max (mx, a[i]);
		mn = min (mn, a[i]);
	}
	cout << "counting_sort: ";
	for (int i = mn; i <= mx; i++)
		if (h[i] != 0)
			for (int j = 1; j <= h[i]; j++) cout << i << " "; 
}

int main () {
	
	cin >> n;
	
	for (int i = 1; i <= n; i++) {
		cin >> b[i];
		a[i] = b[i];
	}
	
	selection_sort ();  //选择排序 
	cout << "selection_sort: "; 
	for (int i = 1; i <= n; i++) cout << a[i] << " ";
	cout << endl;
	
	for (int i = 1; i <= n; i++) a[i] = b[i];  //赋值回待排序数组 
	bubble_sort ();  //冒泡排序 
	cout << "bubble_sort: ";
	for (int i = 1; i <= n; i++) cout << a[i] << " "; 
	cout << endl;
	
	for (int i = 1; i <= n; i++) a[i] = b[i];  //赋值回待排序数组 
	optimized_bubble_sort ();  //优化冒泡排序 
	cout << "optimized_bubble_sort: ";
	for (int i = 1; i <= n; i++) cout << a[i] << " ";
	cout << endl;
	
	for (int i = 1; i <= n; i++) a[i] = b[i];  //赋值回待排序数组 
	insert_sort1 ();  //插入排序方法1 
	cout << "insert_sort1: ";
	for (int i = 1; i <= n; i++) cout << a[i] << " ";
	cout << endl;
	
	for (int i = 1; i <= n; i++) a[i] = b[i];  //赋值回待排序数组 
	insert_sort2 ();  //插入排序方法2
	cout << "insert_sort2: ";
	for (int i = 1; i <= n; i++) cout << a[i] << " ";
	cout << endl;
	
	for (int i = 1; i <= n; i++) a[i] = b[i];  //赋值回待排序数组 
	counting_sort ();  //计数排序
	cout << endl;
	
	return 0;
}
RK3568-Linux-麒麟系统---更新制作麒麟rootfs RK3568 Linux系统 麒麟国产麒麟镜像 阅读详情

相关推荐

HarmonyOS开发第一步:Dev Eco Studio4.0保姆级安装配置指南(含Node.js环境)

本文提供HarmonyOS开发环境搭建的保姆级教程,重点详解Dev Eco Studio 4.0的安装与配置,并攻克Node.js环境与Ohpm包管理器的关键设置难点。通过清晰的步骤指引,帮助开发者从零开始,高效完成开发环境部署,顺利迈出鸿蒙应用开发的第一步。

lake5的博客 570

十大常用经典排序算法总结!!!

爆肝整理!堪称全网最详细的十大常用经典排序算法总结!!! 写在开头,本文经过参考多方资料整理而成,全部参考目录会附在文章末尾。很多略有争议性的细节都是在不断查阅相关资料后总结的,具有一定普适性。 总表: 相关解释: 稳定:如果原本序列中a在b前面且a=b,排序后a仍在b前面,顺序不变; 不稳定:如果原本序列中a在b前面且a=b,排序后a可能在b后面,顺序可能发生改变; 内排序:所有排序操作均在内存中完成; 外排序:由于数据量太大,将其放入磁盘中,排序过程中需要磁盘与内存之间的数据传输;

Jing Sir的博客 5万+

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8755

Java常用的八种排序算法与代码实现

在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力。那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法。

xiaoxijinger的博客 5202

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2379

基于STM32L4XX 、HAL库的DRV8311三相无刷直流电机(BLDC)驱动应用C语言程序设计

是德州仪器(TI)推出的一款针对三相无刷直流(BLDC)电机或永磁同步电机(PMSM)的集成驱动器芯片。:集成了三个半桥MOSFET、门极驱动电路、电荷泵(支持100%占空比)、稳压器以及多种保护电路。:工作电压最高可达,持续输出电流可达,峰值电流可达。:通过引脚直接控制每个半桥的PWM和使能。这种方式需要MCU输出6路信号,控制更灵活。:通过SPI总线配置内部寄存器,仅需PWMA/B/C三路PWM信号即可控制电机。可以读取故障状态、配置参数(如死区时间、电流保护阈值等),是更常用和推荐的方式。

PP_Cottage的博客 556

常用排序算法代码兑现

回顾兑现代码 1 冒泡排序 2 快速排序 3 直接选择排序 4 堆排序 5 直接插入排序 6 希尔排序 7 归并排序 总结 欢迎关注算法channel公众号 回顾五天过去了,8个主要排序算法的思想和原理图解都已经推送完了,在这些推送中,我们详细分析讨论了 各种排序算法的时间、空间复杂度; 算法的稳定性; 算法的优化改进 算法的应用场景 如果您想了解或者进一步熟悉下这些算法原理,请参考之前

相信相信的力量 1822

Java常用排序算法及代码(详解)

常用排序算法详解含代码

随梦而飞的博客 1323

吊打BEVFormer!GaussianBeV实战:用3D高斯开启BEV分割新范式

GaussianBeV是一种基于3D高斯建模的BEV分割新方法,在自动驾驶感知任务中实现了SOTA性能。其核心创新在于将场景元素表示为3D高斯分布,通过均值、协方差和权重精确描述物体位置、形状和置信度,相比传统BEV方法具有更强的空间建模能力。文章详细介绍了GaussianBeV的原理、环境配置、训练推理流程及其在自动驾驶和城市3D重建中的应用,并讨论了优化方向和未来发展趋势。该方法在nuScenes等数据集上表现出色,为BEV分割任务提供了新的解决方案。

m0_71589036的博客 106

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

算法大师! 1009

四个时间复杂度为nlogn的排序算法

希尔排序、堆排序、快速排序、归并排序,四个时间复杂度为O(nlogn)的排序算法详解。

wangye135的博客 5734

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

python排序算法可视化 代码_排序算法—Python实现十大常用排序算法

今天将为大家介绍常用的十大排序算法中最简单的五种(冒泡、选择、插入、希尔、归并),主要从:过程图解、算法思想、代码实现、算法分析这四个方面讲解,建议大家看完之后自己动手练习加强记忆!注:本文使用的复杂度均为最坏复杂度一、冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,一层一层的将较大的元素往后移动,...

weixin_39629679的博客 327

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

常用排序算法学习

本篇文章主要记录排序算法的学习过程,如有遗漏,还望提醒提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

weixin_43841761的博客 1584

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言 常用排序算法(附代码)

主要记录一些我常用到的排序算法,没用到的暂时不记录。 qsort库函数 qsort函数是C语言中一个快速排序的标准库函数,在stdlib.h中声名,其用法为: void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 其中: base为待排序数组的起始地址,即数组名。 nelem为待排序数组个数,如果知道元素为N个就写N,如果不知道就sizeof(arr)/

Chilling的博客 2428

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

四个高级排序算法

一、希尔排序 希尔排序是插入排序算法的一个改进,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲。希尔排序是通过自定义控制增量来将一组数据分成若干组,对每个组内元素先进行插入排序,然后再控制增量变小使每个组内的元素越来越多,当增量减小至1时,算法终止,排序就完成了。 比如[5,4,3,2,1]如果直接用插入排序,外层循环会从4开始以增量1一步步扩大有序序列。 而使用希尔排序,我们可以控制增量gap = arr.length/2 = 5/2 = 2 . 那么 最终会将此数据分

鱼儿往上游的博客 659

几种常用排序算法及代码

冒泡排序算法 冒泡排序思想:遍历数组,从后向前,将靠后的较小元素通过交换位置不断向前靠拢,直到没有元素需要向前移动为止(可以想象成如气泡一样小的气泡不断像上浮动) 源代码实现如下 import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int str[]=...

码之千里者 786

常用排序算法总结及代码实现

排序算法可以说是我第一个接触的算法,将一个无序序列按某个规则进行有序排列,而排序算法多种多样,深入理解排序算法,选择最适合的那个算法去解决问题,是我们应该学习和掌握的。 1. 冒泡排序 冒泡排序算法是排序算法中最基础的一种,它的本质在于两个数之间的交换,如果按从小到大的顺序将某一无序序列进行排序,冒泡的思想就是每次通过交换的方式将当前剩余元素的最大值放到一端,直到元素的个数减少为0。 例如:存在一个无序序列{8,9,6,5,7,3,2,1,4,0},使用冒泡算法按从小到大的顺序进行排序。 实现代码: #i

Fan的博客 524

各种常用排序算法的总结

title: 各种常用排序算法的总结 author: BestQiang tags: 排序算法 categories: 算法 各大常用排序算法总结 排序算法为最基础,而有最常用的算法,下面列举了冒泡排序,选择排序,插入排序,快速排序.算法总结均为个人的理解,用于以后如果遗忘能够快速回忆. 1.冒泡排序 **思想:**将需要排序的数组的n个元素看做一个个气泡,每次浮出一个最大的,需要浮出n - ...

BestQiang的博客 1万+

常用排序算法总结

 https://www.cnblogs.com/eniac12/p/5329396.html 目录 冒泡排序   鸡尾酒排序   选择排序 插入排序 二分插入排序   希尔排序   归并排序 堆排序 快速排序   我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。   排序算法大体可分为两种:     一种是比较排序,时间复杂度...

宁静致远 406

十种常用排序算法总结

前言 常用的有十种排序算法,包含了插入、选择、交换、分治、线性五种类别,本篇博客将对这十种排序算法做一个总结,并附带C++代码 总体表格 分别来看 插入排序 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 void InserttSort(int array[], int length) { ...

a568713197的博客 3565

八种常用排序算法总结

八种常用排序算法分类时间复杂度、空间复杂度及稳定性分析不同应用场景下的排序算法选择1、数据规模较小待排序列基本序的情况下,可以选择直接插入排序;对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入或冒泡2、数据规模不是很大完全可以用内存空间,序列杂乱无序,对稳定性没有要求,快速排序,此时要付出log(N)的额外空间;序列本身可能有序,对稳定性有要求,空间允许下,宜用归并排序3、数据规模很大对稳...

当下 1959

js 常用排序算法

选择排序是一种简单易懂的排序算法。它的基本思想是遍历整个列表,每次找出最小的元素,并且将它移到列表的最左边,重复这个过程直到整个列表都有序排列。在平均情况下,选择排序的时间复杂度为 O(n^2),在最坏情况下与最好情况下都为 O(n^2)。选择排序在数据规模较小时非常适用,在数据规模较大时不够高效。插入排序是一种简单而直观的排序算法,它可以快速地对部分有序的数组进行排序。插入排序通过比较相邻的元素并在需要时将其交换,来实现从小到大的排列。

weixin_45730243的博客 3548

10 种最佳排序算法原理及代码

从本质上讲,排序算法是一种计算机程序,它将数据组织成特定的顺序,例如字母顺序或数字顺序,通常是升序或降序。对于任何对编程、数据分析或计算机科学感兴趣的人来说,了解排序算法的基础知识都是必不可少的。通过了解不同的排序算法及其特征,您可以提高为特定用例选择和实施最佳算法的能力。排序算法的最佳选择取决于几个因素,包括输入数据的大小、数据的分布、可用内存和所需的时间复杂度。排序算法可以根据其时间复杂度、空间复杂度、就地排序、稳定排序和自适应排序进行分类。

一览无遗 1570

常用的排序算法

文章目录前言1、选择排序1.1、算法描述1.2、时间复杂度1.3、代码2、冒泡排序2.1、算法描述2.2、时间复杂度2.3、代码3、插入排序3.1、算法描述3.2、时间复杂度3.3、代码二、使用步骤1.引入库2.读入数据总结 前言 常用的排序算法描述及代码实现 1、选择排序 1.1、算法描述 以8个元素的排序为例,模拟一下整个算法过程。 找出1~8元素的最小值,并且记录最小值的位置为k。 将其与第1位元素交换。 找出2~8元素的最小值,并且记录最小值位置k。 将其与第2位元素交换。 照此过程一直

weixin_40295061的博客 668
上一篇: 队列
下一篇: 数组模拟栈-代码
Runcode8
博客等级 码龄4年 180粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值