数据结构——算法之(043)(c++各种排序算法实现)

数据结构与算法Java版学习教程,最适合新手入门(通俗易懂) 😀俗话说: 数据结构玩的好,大厂为你敞开门 核心算法掌握牢,高薪自动找上门Java 关于数据结构算法的重要性,不言而喻,做开发的都懂。 但是,能学的好,用的好的寥寥无几 除了基础不牢靠外,还有一个原因就是可以供Java程序员学习的教程并不多。 目前市面上更多的是C语言,C++版的数据结构和算法,极少有关于Java数据结构和算法的课程,所以Java程序员往往需要跨语言学习,难度和效率大大折扣! 动力节点老师专为Java程序员精细录制,一套属于咱Java程序员的数据结构和算法课程,帮助广大Ja.. 阅读详情

【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】

题目:

c++ 各种排序算法实现
题目分析:

具体排序原理参考相关算法书籍

算法实现:

#include <stdio.h>

static void swap(int *a, int *b)
{
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

static void display(int *array, int size)
{
	int i=0; 
	for(; i<size; ++i)
		printf(" %02d", array[i]);
	printf("\n");
}

void bubble_sort(int *array, int size)
{
	int i,j;
	for(i=0; i<size-1; ++i)
	{
		for(j=i+1; j<size; ++j)
		{
			if(array[i] > array[j])
				swap(&array[i], &array[j]);
		}
	}
}

void select_sort(int *array, int size)
{
	int i, j, min;
	for(i=0; i<size-1; ++i)
	{
		min = i;
		for(j=i+1; j<size; ++j)
		{
			if(array[i] > array[j])
			{
				min = j;
				break;
			}
		}
		if(min != i)
			swap(&array[i], &array[j]);
	}
}

void quick_sort(int *array, int begin, int end)
{
	int left = begin;
	int right = end;
	
	int split = array[begin];
	while(left <= right)
	{
		while(array[left] < split && left < end)
			left++;
		while(array[right] > split && right > begin)
			right--;
		if(left <= right)
			swap(&array[left++], &array[right--]);
	}
	if(left < end)
		quick_sort(array, left, end);
	if(right > begin)
		quick_sort(array, begin, right);
}

void insert_sort(int *array, int size)
{
	int i, j, tmp;
	const int width = 1;
	for(i=width; i<size; ++i)
	{
		tmp = array[i];
		
		j = i-width;
		while(j >= 0 && tmp < array[j])
		{
			array[j+width] = array[j];
			j -= width;
		}
		array[j+width] = tmp;
	}
}

void shell_sort(int *array, int size)
{
	int i, j, tmp;

	int width = size/2;
	while(width >= 1)
	{
		for(i=width; i<size; ++i)
		{
			tmp = array[i];
			
			j = i - width;
			while(j>=0 && tmp < array[j])
			{
				array[j+width] = array[j];
				j -= width;
			}
			array[j+width] = tmp;
		}
		width /= 2;
	}
}

void heap_update(int *array, int current, int top)
{
	int i = current;
	int j = 2*i;
	int tmp = array[current];
	
	while(j <= top)
	{
		if(j < top && array[j] < array[j+1])
			j++;
	
		if(array[j] <= tmp)
			break;
		
		{
			array[i] = array[j];
			i = j;
			j = 2*i;
		}
	}
	array[i] = tmp;
}

void heap_sort(int *array, int size)
{
	int i;
	for(i=size/2; i>0;--i)
		heap_update(array, i, size);
	
	for(i=size; i>=2; i--)
	{
		swap(&array[1], &array[i]);
		heap_update(array, 1, i-1);
	}
}


int main(int argc, char *argv[])
{
	int a[] = {5, 12, 67, 9, 20, 13, 16, 21, 90, 54, 32, 61, 90, 101, 3, 2, 7, 8};
	int size = sizeof(a)/sizeof(int);

	printf("%-8s", "before: ");
	display(a, size);

	switch(atoi(argv[1]))
	{
	case 1:
		printf("bubble_sort: ");
		bubble_sort(a, size);
		display(a, size);
		break;
	case 2:
		printf("select_sort: ");
		select_sort(a, size);
		display(a, size);
		break;
	case 3:
		printf("quick_sort: ");
		quick_sort(a, 0, size-1);
		display(a, size);
		break;
	case 4:
		printf("insert_sort: ");
		insert_sort(a, size);
		display(a, size);
		break;
	case 5:
		printf("shell_sort: ");
		shell_sort(a, size);
		display(a, size);
		break;
	case 6:
		printf("heap_sort: ");
		heap_sort(a, size-1);
		display(a, size);
		break;
	default:
		break;
	}
	return 0;
}


C++ 语言课程笔记 【题目】要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70 ~ 84,C等60 ~ 69,D等为60分以下。如果不是,则不转换。【题目】写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束。【题目】求多项式1-1/2+1/3-1/4+...+1/99-1/100。 阅读详情

相关推荐

C++怎么学?零基础也可以,一份完整学习路线图助你搞定!

提供一条清晰、系统且实践导向的C++学习路径。从基础语法、面向对象、泛型编程、异常处理,逐步深入STL、智能指针、并发编程等现代C++高级特性。无论是新手还是希望提升,通过系统学习与项目实践,助您将理论知识转化为实际解决问题的能力。

Lion_Long的博客 4025

几大排序算法-C++版

冒泡排序 #include <iostream> using namespace std; //冒泡排序 void bubble_sort(int array[],int size) { int i, j; for (i = size-1 ; i > 0; i--) { for (j = 0; j < i ; j++) { if (array[j] >...

好好学习,天天向上 223

从IEC标准到HSR协议:一套高可用冗余培训教案的实战拆解

工业通信领域中,标准与协议构成了技术体系的基石。IEC作为全球性的电工标准框架,覆盖了从低压绝缘配合到设备标识的广泛议题,而高可用无缝冗余协议(HSR)正是这一体系下针对环网通信零切换需求的关键技术。HSR通过帧复制双发机制,使网络在故障发生时无需切换即可保持数据连续传输,相较STP/MRP等传统冗余方案具有本质优势。在变电站保护、轨道交通控制等对中断时间极其敏感的行业中,理解HSR的原理与工程落地方式已成为自动化与电气工程师的必备技能。本文将IEC标准拆解与HSR协议教学相结合,围绕知识点讲解、教学类比设

481

十大经典排序算法(C++实现)

0、算法分类 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,时间复杂度为 O(nlogn)~O(n²)。 非比较类排序:不通过比较来决定元素间的相对次序,其时间复杂度可以突破 O(nlogn),以线性时间运行。 名次解释: 时间/空间复杂度:描述一个算法执行时间/占用空间与数据规模的增长关系。 n:待排序列的个数。 k:“桶”的个数(上面的三种非比较类排序都是基于“桶”的思想实

m0_60935443的博客 1万+

数据结构排序算法课程设计

排序算法 希尔排序 快速排序 选择排序 冒泡排序 插入排序

C++数据结构排序算法

C++数据结构排序算法总结,包含详细可执行代码以及算法讲解!

常见的几种排序算法(c++)

常见的几种排序算法(c++)一、冒泡排序二、插入排序三、选择排序四、归并排序五、希尔排序六、快速排序七、堆排序八、基数排序1.LSD(低位到高位的排序)2.MSD(高位到低位排序)算法比较 一、冒泡排序 1、算法思想 冒泡排序是一种简单的排序算法,通过循环遍历,将临近的两个元素进行比较,满足排序规则时,进行下一组元素对比,当不满足排序规则时,将两个元素交换位置,再继续进行下一组元素对比,确保最大的...

low5252的博客 1万+

数据结构排序算法代码汇总

//快速排序 //***************************************************************************// //2011.09.28 //快速排序递归算法 #include #include int Slipt(int a[], int low, int high); void QuickSort(int a[], int low, int high); const int num=10; void main() { int a[num]; int i; for(i=0; i<num; i++) { a[i]=rand()0; cout<<a[i]<<" "; } cout<<endl; QuickSort(a,0,num); for(i=0; i<num; i++) { cout<<a[i]<<" "; } cout<<endl; } void QuickSort(int a[], int low, int high) { int i; if(low<high) { i=Slipt(a,low,high); QuickSort(a,low,i); QuickSort(a,i+1,high); } } int Slipt(int a[], int low, int high) { int i,j,x,temp; x=a[low]; i=low; for(j=low; j<high; j++) { if(a[j]<x) { i=i+1; if(i!=j) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } temp=a[low]; a[low]=a[i]; a[i]=temp; return i; }

【C++ | 数据结构】八大常用排序算法详解

排序是我们生活中经常会面对的问题,小朋友站队的时候会按照从矮到高的顺序排列;老师查看上课出勤情况时,会按照学生的学号点名;高考录取时,会按照成绩总分降序依次录取等等。那么对于排序它是如何定义的呢? 排序是将一批无序的记录(数据)根据关键字重新排列成有序的记录序列的过程。 在工作和编程过程中我们经常接触的有八种经典的排序算法分别是: 关于排序还有另一个大家需要掌握的概念就是排序的稳定性。排序的稳定性指的是在排序算法中,如果两个元素的键值相等,排序后它们的相对顺序是否会保持不变。在选

qq_42037383的博客 1396

常见数据结构、查找、排序 c++实现

栈、队列、链表、树、二叉树、图的c++实现。常见的查找、排序算法。

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)

本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。

cake8的博客 1050

【数据结构】十大排序算法C++实现

参考 数据结构十大排序算法讲解:算法原理和LeetCode代码实现(C++,java) 【数据结构】十大排序算法—— C++实现<全> 十大经典排序算法(C++实现)

qq_42147969的博客 8469

2015年全国大学生电子设计大赛综合测评题

2015年全国大学生电子设计大赛综合测评题 题目如下: 一、555产生可调方波 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。 555定时器可组成单稳态电路、多稳态电路和无稳态电路。产生方波其实就是制造一个无稳态电路。 555定时器的引脚功能: 其中: DIS引脚与OUT脚电平一致 TRIG: 当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时输出端给出高电平。 THR:当此引脚电压升至2/3VCC(或由控制端决定的阈值电压

m0_47066484的博客 3万+

各种排序算法的C++实现与性能比较

排序是计算机算法中非常重要的一项,而排序算法又有不少实现方法,那么哪些排序算法比较有效率,哪些算法在特定场合比较有效,下面将用C++实现各种算法,并且比较他们的效率,让我们对各种排序有个更深入的了解。 minheap.h 用于堆排序: view sourceprint?001 //使用时注意将关键码加入 002 #ifndef MINHEAP_H 003 #defi...

rein07的专栏 448

C# 异步编程详解(Task,async/await)

同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。

luxingyu329的博客 4154

Langfuse实战:从评估打分到问题解决的完整指南

本文详细介绍了如何利用开源LLM工程平台Langfuse对AI应用进行系统性评估与优化。从创建评估数据集、设计自动化评分函数,到深入排查常见问题并关联Trace进行精准打分,提供了完整的实战指南。最后,探讨了如何利用评估结果驱动提示词迭代与A/B测试,并给出了生产环境部署与性能优化的关键考量,帮助开发者构建可测量、可分析、可改进的LLM应用。

backprop5master的博客 651

数据结构与算法Java版学习教程,最适合新手入门(通俗易懂!)

????俗话说: 数据结构玩的好,大厂为你敞开门 核心算法掌握牢,高薪自动找上门Java 关于数据结构算法的重要性,不言而喻,做开发的都懂。 但是,能学的好,用的好的寥寥无几 除了基础不牢靠外,还有一个原因就是可以供Java程序员学习的教程并不多。 目前市面上更多的是C语言,C++版的数据结构和算法,极少有关于Java数据结构和算法的课程,所以Java程序员往往需要跨语言学习,难度和效率大大折扣! 专为Java程序员精细录制,一套属于咱Java程序员的数据结构和算法课程,帮助广大Java程序员

sion127的博客 576

小论文/大论文必备 | YOLO多模态目标检测、绘制曲线对比图 | 引入多种绘制曲线对比图,包括mAP0.5,mAP0.5:0.95,Loss损失变化的曲线对比

本文通过可视化方法分析YOLO多模态模型的训练过程,对比不同实验的检测精度和损失函数变化。主要内容包括:1)绘制mAP@0.5和mAP@0.5:0.95曲线评估检测精度;2)分析边界框回归损失(box_loss)、分类损失(cls_loss)和分布式损失(dfl_loss)的收敛趋势;3)提供完整的Python代码实现,支持多实验对比,可生成高清曲线图。该方法能直观展示模型训练效果,便于优化策略评估和参数调优。

Ai缝合怪、助力小伙伴高效发论文 261

数据结构完整实现孙弋教授目录结构

文章仅仅是个目录,如果学习可以收藏,里面包含所有数据结构老师的实现,而且是实实在在的讲解。包括了:课堂上讲的所有代码实现。理论与实践相结合,堪称上品。其中1-6讲解C++如何在数据结构使用,7-22主要讲表、队列、栈,24-33讲解树,34-49讲解图,50-58讲解查找与排序,这还不收藏?

执念斩长河 873

基于coze studio开源框架二次定制开发教程

CozeStudio是一站式AIAgent开发工具,支持大模型接入、智能体编排、工作流开发等功能。采用Golang+React技术栈,基于微服务架构设计。项目包含后端API、领域逻辑、前端应用等模块,支持自定义任务流节点开发。开发流程涵盖前后端节点定义、实现逻辑编写等步骤,提供完整的开发规范和参考文档。相比商业版,开源版本在功能上有所精简,但仍保留核心开发能力。

coding change your life 790

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

君逍遥o 408

L1-043 阅览室

PTA

2301_79690805的博客 138

基于自抗扰控制的虚拟同步发电机二次调频控制研究

摘要:本文针对高比例可再生能源并网导致的电力系统频率稳定性问题,提出基于自抗扰控制(ADRC)的虚拟同步发电机(VSG)二次调频控制策略。通过分析VSG工作原理和传统调频方法的不足,设计了非线性ADRC和线性ADRC两种控制器,详细阐述了参数整定方法。仿真结果表明,该策略能有效消除频率稳态偏差,提升系统抗扰能力,为分布式电源参与电网调频提供了新思路。 关键词:虚拟同步发电机;自抗扰控制;二次调频;频率调节;抗扰能力

huanghm88的专栏 244

暑假算法刷题日记 Day 10

排序

gdjdjdj的博客 686

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基数排序详解

详解基数排序

KLZUQ的博客 387

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c++排序函数对二维数组排序_2020大厂笔试 | 网易提前批 (2)有条件的排序数组...

点击上方“Jerry的算法和NLP”,选择“星标”公众号 重磅干货,第一时间送达题目2. 有条件的排序数组题目有条件的排序数组题目要求 给定n个数字,a1a2a3...an,你可以对这个数组执行任意次以下交换操作:对于数组中的两个下标i,j(1<=i.j<=n),如果ai+aj为奇数,那么就可以交换这两个数 现在允许我们的交换次数不限,求出能够通过若干次操作...

weixin_39642981的博客 170

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 数据结构——算法之(042)(字符串移位包含的问题, s1是否可以由s2移位后得到)
mr_chenping
博客等级 码龄14年 134粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值