C语言--简单排序算法(冒泡、选择、插入)

实现三种简单的排序算法

文章目录

  • 冒泡排序
    • 改进
    • 改进2
  • 选择排序
  • 插入排序
  • 执行结果

冒泡排序

每次外层循环,排出一个最大值

void bubbleSort(int arr[], int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}

改进

  1. 设置排序完成标志,如果排序完成跳出循环
  2. 通过设置边界,跳过无意义的片段
void bubbleSort2(int arr[], int len) {int border = len - 1;for (int i = 0; i < len; i++) {bool isSorted = true;int lastSwap = 0;for (int j = 0; j < border; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;isSorted = false;lastSwap = j;}}border = lastSwap;if (isSorted) {break;}}
}

改进2

双向冒泡排序,又称鸡尾酒排序

void bubbleSort3(int arr[], int len) {for (int i = 0; i < len / 2; i++) {//有序标记,每一轮的初始值都是truebool isSorted = true;//奇数轮,从左向右比较和交换for (int j = i; j < len - i - 1; j++) {if (arr[j] > arr[j + 1]) {int t1 = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t1;isSorted = false;}}if (isSorted) {break;}//在偶数轮之前,将isSorted重新标记为trueisSorted = true;for (int j = len - i - 1; j > i; j--) {if (arr[j] < arr[j - 1]) {int t2 = arr[j];arr[j] = arr[j - 1];arr[j - 1] = t2;isSorted = false;}}if (isSorted) {break;}}
}

动态记录有效边界

void bubbleSort4(int arr[], int len) {int left = 0;int right = len - 1;int lastSwap = 0;while (left < right) {// 奇数轮lastSwap = left;for (int i = left; i < right; i++) {if (arr[i] > arr[i+1]) {int t1 = arr[i];arr[i] = arr[i+ 1];arr[i+ 1] = t1;lastSwap = i;}}// 收缩右边界right = lastSwap;// 偶数轮lastSwap = right;for (int i = right; i > left; i--) {if (arr[i] < arr[i - 1]) {int t2 = arr[i];arr[i] = arr[i - 1];arr[i - 1] = t2;lastSwap = i;}}// 收缩左边界left = lastSwap;}
}

选择排序

每次循环选出一个最小值,放在数组最前面

  void selectionSort(int arr[], int len) {for (int i = 0; i < len; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}
}

插入排序

每次将一个数加入到已经排好序的数列当中
第一个数是直接排好的

void insertionSort(int arr[], int len) {for (int i = 1; i < len; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}
}

执行结果

int main() {//定义数组元素int array[] = {12, 3, 77, 34, 91, 23, 19, 1,45, 37};int len = sizeof(array) / sizeof(array[0]);insertionSort(array, len);//输出for (int i = 0; i < len; i++) {printf("%d ", array[i]);}printf("\n");return 0;
}

![在

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

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

相关文章

如何获取Mac OS 安装盘

发现虚拟机VirtualBox支持Mac虚拟&#xff0c;就想尝试一下。但是发现Mac的安装盘特别难拿到&#xff0c;因此留档。发现有几种方法&#xff0c;最简单的方法&#xff0c;是在有Mac 机器的情况下&#xff0c;直接到App Store里&#xff0c;根据Mac版本的名字查找并下载。另外还…

AWS中使用CloudFront分发API Gateway

首先需要准备一个Lambda function(Lambda->Functions) 还要准备一个证书&#xff0c;要覆盖子域名&#xff08;AWS Certificate Manager->Certificates&#xff09;。 1、API Gateway->Create API->REST API->Build->API endpoint type( Edge-optimized )-…

【STM32项目实战系列】基于STM32G474的FDCAN驱动配置

前言&#xff1a;本周工作中用到了CANFD的驱动&#xff0c;由于以前都是用到的CAN2.0&#xff0c;所以过程并不是特别的顺利&#xff0c;所以中间遇到几个比较小的问题导致自己卡住了一段时间&#xff0c;特此记录一下并完全奉上自己的配置的源码。 1&#xff0c;CANFD配置与简…

解决git clone下载慢或者超时问题

在网上找了很多办法&#xff0c;直接最简单的使用镜像网站下载。 国内可用的镜像网站有&#xff1a; https://github.com.cnpmjs.org # 服务器位于香港https://gitclone.com # 服务器位于杭州https://doc.fastgit.org # 服务器位于香港 例如&#xff1a;将 git clone https:…

nginx+keepalived负载均衡及高可用

1 项目背景 keepalived除了能够管理LVS软件外&#xff0c;还可以作为其他服务的高可用解决方案软件。采用nginxkeepalived&#xff0c;它是一个高性能的服务器高可用或者热备解决方案&#xff0c;Keepalived主要来防止服务器单点故障的发生问题&#xff0c;可以通过其与Nginx的…

Hive 3.1 在 metastore 运行的 remote threads

Remote threads 是仅当 Hive metastore 作为单独的服务运行是启动&#xff0c;请求需要开启 compactor。 有以下几种&#xff1a; 1. AcidOpenTxnsCounterService 统计当前 open 的事务数 从表 TXNS 中统计状态为 open 的事务。此事务数量可以再 hive metrics 中。 2. Acid…

厦门大学第二讲:DeepSeek大模型赋能高校教学和科研(124页)(文末附下载方法)

厦门大学大数据教学团队林子雨副教授发布&#xff1a; 厦大团队&#xff5c;报告&#xff1a;《读懂大模型概念、技术与应用实践》https://blog.csdn.net/2401_83947004/article/details/145995693?sharetypeblogdetail&sharerId145995693&sharereferPC&sharesou…

解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported

找了好多教程都没有用&#xff0c;终于解决了&#xff01;&#xff01;我是因为ubuntu分区的时候出问题了 问题描述&#xff1a; 双系统装好&#xff0c;隔天开机找不到引导项&#xff0c;黑屏显示下列 因为我用的D盘划分出来的部分空闲空间&#xff0c;而不是全部&#xff0c…

从零到一:快速上手 Poetry——Python 项目管理的利器

在 Python 项目开发中&#xff0c;包管理、依赖管理和虚拟环境的创建一直是开发者们经常面对的难题。传统上&#xff0c;开发者通常会使用 pip、virtualenv 或者 conda 来处理这些问题。然而&#xff0c;随着 Python 项目复杂度的增加&#xff0c;传统工具往往显得力不从心&…

基于Windows11的RAGFlow安装方法简介

基于Windows11的RAGFlow安装方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是否成功&#…

基于Android平台的SOME/IP测试模块 EPT-ETS

在汽车产业智能化、网联化的时代浪潮中&#xff0c;汽车电子系统正经历着前所未有的变革。SOME/IP&#xff08;Scalable service-Oriented MiddlewarE over IP&#xff09;协议作为汽车电子通信领域的关键技术&#xff0c;其稳定性、可靠性与高效性对于整车性能的提升起着至关重…

初阶数据结构习题【7】(3顺序表和链表)—— 21. 合并两个有序链表

1. 题目描述 力扣在线OJ——21合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1…

ESP32 IDF的触摸按键例子

硬件资源 1.ESP32 开发板 2. LED灯&#xff08;-接到GND, 通过10K电阻接到PIN4) 3. 触摸按键&#xff08;接到PIN32,对应触摸通道9) 预期效果&#xff1a; 1. 点动模式&#xff1a;小于1s的触摸&#xff0c;LED交替亮灭 2. 长按模式&#xff1a;大于1s的触摸&#xff0c;…

《2025软件测试工程师面试》功能测试篇

什么是功能测试? 功能测试是通过验证产品功能是否满足用户需求的过程,主要关注软件的功能是否符合需求规格说明,包括软件的各种功能、特性、性能、安全性和易用性等。 功能测试的流程包括哪些步骤? 需求分析:明确软件需求,确定测试范围。测试计划:制定详细的测试计划,…

python官方文档阅读整理(一)

2.2 解释器的运行环境 2.2.1 源文件的字符编码 默认情况下&#xff0c;python源码文件的编码是UTF-8。 3.Python速览 Python注释以#开头&#xff0c;直到该物理行结束。注释可以在行开头&#xff0c;或空白符与代码之后&#xff0c;但不能在字符串里面。 3.1 Python用作计…

队列的顺序结构—循环队列的判断条件(rear + 1) % MAXSIZE分析

一、为什么需要牺牲一个空间&#xff1f; 循环队列通过 front 和 rear 指针的位置关系来判断队列的空和满。但如果不牺牲一个空间&#xff0c;会导致以下问题&#xff1a; 1. 队空和队满的冲突 队空条件&#xff1a;front rear。队满条件&#xff1a;如果允许队列完全填满&…

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中&#xff0c;全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构&#xff0c;企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例&#xff0c;其利用中台系统将分散在CRM、ERP及内部文档…

大模型学习--微调

模型微调是一种在已有预训练模型的基础上&#xff0c;通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时&#xff0c;适应特定任务的细微差别。使用微调模型&#xff0c;可以获得以下好处&#xff1a; 提高性能&a…

【C++】模板编程入门指南:零基础掌握泛型编程核心(初阶)

文章目录 一、泛型编程二、函数模板1. 函数模板的概念和格式2. 函数模板的原理3. 函数模板的实例化隐式实例化显式实例化 三、类模板 一、泛型编程 泛型编程就是编写与类型无关的通用代码&#xff0c;是代码复用的一种手段&#xff0c;模板是泛型编程的基础&#xff0c;可能不太…

IO学习day2

一、思维导图 IO标准函数 问&#xff1a; printf\fprintf\sprintf\snprintf之间的区别&#xff1f; 1. printf&#xff1a;格式串输出&#xff0c;会在当前终端打印输出结果 2. fprintf&#xff1a;文件的写入&#xff0c;可以写入不同的数据类型&#xff08;int&#xff0c…