news 2026/2/25 4:47:44

入门基础:四大基础排序算法(C语言实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
入门基础:四大基础排序算法(C语言实现)

四大基础排序算法

排序算法是编程世界的基石,本文深入讲解四种最基础、最常用的排序算法:冒泡排序、快速排序、插入排序和选择排序。

1. 冒泡排序

算法思想

重复遍历数组,比较相邻元素,如果顺序错误就交换,使得较大元素逐渐到数组末尾。

//冒泡排序voidBubble_Sort(intarr[],intlen){for(inti=0;i<len-1;i++){for(intj=0;j<len-1-i;j++){if(arr[j+1]<arr[j]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}
适用场景不适用场景
教学演示和理解排序原理大规模数据排序
小规模数据(n<100)性能要求高的场景
数据基本有序需要处理复杂对象的场景

常见错误总结

  1. 数组越界:必须确保内层循环条件是j<len-1-i
  2. 忘记使用临时变量:直接交换会导致数据丢失

2. 快速排序

算法思想

选择一个基准元素,将数组分为两部分,左边都小于基准,右边都大于基准,然后递归排序左右两部分。

// 交换两个元素voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}// 分区函数 - 快速排序的核心intpartition(intarr[],intlow,inthigh){// 选择最后一个元素作为基准intpivot=arr[high];// i 指向小于基准的区域的最后一个位置inti=low-1;// 遍历数组for(intj=low;j<high;j++){// 如果当前元素小于等于基准if(arr[j]<=pivot){i++;// 扩展小于基准的区域swap(&arr[i],&arr[j]);// 将当前元素放到小于基准的区域}}// 将基准放到正确位置(i+1)swap(&arr[i+1],&arr[high]);// 返回基准的最终位置returni+1;}// 快速排序voidQuick_Sort(intarr[],intlow,inthigh){if(low<high){// pi 是基准的最终位置intpi=partition(arr,low,high);// 递归排序左右两部分Quick_Sort(arr,low,pi-1);// 左半部分Quick_Sort(arr,pi+1,high);// 右半部分}}
适用场景不适用排序
大规模数据排序小数据量排序(n<20)
对平均性能要求高且内存有限的场景数据基本有序
不需要稳定排序需要稳定排序

3. 插入排序

算法思想

将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。

//插入排序voidinsertionSort(intarr[],intn){for(inti=1;i<n;i++){intkey=arr[i];// 当前要插入的元素intj=i-1;// 将比key大的元素向后移动while(j>=0&&arr[j]>key){arr[j+1]=arr[j];j--;}// 插入key到正确位置arr[j+1]=key;}}
适用场景不适用场景
小规模数据(n<50)大规模随机数据(n>1000)
数据基本有序逆序或高度无序数据
链表排序性能要求极高的场景

4. 选择排序

算法思想

每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。

//选择排序voidselectionSort(intarr[],intn){for(inti=0;i<n-1;i++){// 假设当前位置是最小值intminIndex=i;// 在未排序部分查找真正的最小值for(intj=i+1;j<n;j++){if(arr[j]<arr[minIndex]){minIndex=j;}}// 将最小值交换到当前位置if(minIndex!=i){inttemp=arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}}}
适用场景不适用场景
小规模数据大规模数据(n>1000)
交换成本高的情况需要稳定排序
需要最少交换次数数据基本有序
内存有限的嵌入式系统性能要求高的场景
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/22 12:31:00

35、RAID 系统迁移与管理全攻略

RAID 系统迁移与管理全攻略 1. RAID 基础管理 在 RAID 系统中,如果需要更换磁盘,可按以下步骤操作: - 用新磁盘替换旧磁盘,并对新磁盘进行分区。要确保新分区的大小等于或大于 RAID 阵列中其他分区。 - 新分区准备好后,使用 --add 命令将其添加到阵列: $ sudo md…

作者头像 李华
网站建设 2026/2/22 19:52:08

37、构建高可用Linux集群:Heartbeat实战指南

构建高可用Linux集群:Heartbeat实战指南 在服务器运行过程中,即使主机配备了RAID和以太网绑定,仍有许多组件可能出现故障,从CPU到主机上的软件都有可能。若要确保服务在主机故障时仍能正常运行,就需要构建集群。本文将介绍基本Linux集群中常用的工具Heartbeat,并详细说明…

作者头像 李华
网站建设 2026/2/24 2:08:37

38、构建高可用集群:Heartbeat与DRBD实战指南

构建高可用集群:Heartbeat与DRBD实战指南 1. 集群准备与Heartbeat简介 在集群搭建过程中,当完成故障转移(fail back)相关操作后,集群就可以进行剩余的测试,适当调整超时设置,随后便可投入实际使用。之前的示例为搭建自己的集群服务提供了一个良好的开端,但它并未涵盖…

作者头像 李华
网站建设 2026/2/23 20:59:42

46、Linux 实用命令与技巧大揭秘

Linux 实用命令与技巧大揭秘 在 Linux 系统的使用过程中,掌握一些实用的命令和技巧能让我们的工作更加高效。下面将为大家详细介绍一系列实用的 Linux 命令及操作方法。 命令路径快捷查找 有时候,我们想查看二进制路径下的某个 shell 脚本,但却记不清它具体位于 /bin 、…

作者头像 李华
网站建设 2026/2/20 12:03:48

25、Ubuntu 网络应用全攻略

Ubuntu 网络应用全攻略 1. Firefox 浏览器使用技巧 Firefox 支持标签式窗口,提供了多种打开新标签的方式: - 点击“New Tab”按钮(现有标签右侧的“+”符号)。 - 按住“Ctrl”键并点击链接,可在新标签中打开。 - 按下“Ctrl - T”组合键。 - 若鼠标有中键,有时点击…

作者头像 李华
网站建设 2026/2/20 16:29:30

26、开启Ubuntu系统下OpenOffice.org的高效办公之旅

开启Ubuntu系统下OpenOffice.org的高效办公之旅 在Ubuntu系统中,我们可以借助网络完成许多操作。若想使用的程序或功能未被提及,可通过Synaptic软件包管理器或Ubuntu软件中心进行搜索,大概率能找到所需的程序或具有类似功能的替代程序。 而开源软件强大功能与能力的一个绝…

作者头像 李华