news 2026/7/24 23:31:52

C语言--排序算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言--排序算法

排序算法有三类:

1.选择排序

2.冒泡排序

3.插入排序

选择排序:

选择排序核心思想:每一轮从待排序的元素中选出最小的一个,放到已排序序列的末尾。

#include<stdio.h> 2 3 int main(int argc, const char *argv[]) 4 { 5 int i,j; 6 int a[]={8,6,2,9,3,5,1,7,4,10}; 7 int len = sizeof(a)/sizeof(a[0]); //获取数组长度 8 for(i=0;i<len-1;i++) //控制要对比的开始位置 开始位置前数组是已排序的 9 { 10 for(j=i+1;j<len;j++) //控制要与开始位置对比的数 11 { 12 if(a[i]>a[j]) //如果开始位置的数更大,则交换位置,使得开始位置的数趋于最小 13 { 14 int t=a[i]; //开始交换 15 a[i]=a[j]; 16 a[j]=t; //结束交换 17 } 18 } 19 } 20 for(i=0;i<len;i++) 21 { 22 printf("a[%d]=%d\n",i,a[i]); //输出数组的所有值 23 } 24 printf("len=%d\n",len); 25 return 0; 26 }

易错点:内层循环需要从i+1开始,若从i开始则a[i]会与a[i]自己比较一次

外循环i需要从0开始,因为数组从a[0]开始

特点

  • 时间复杂度:O(n²)(无论好坏)

  • 空间复杂度:O(1)

  • 交换次数最少
    这里我写的选择排序遇到更小的立刻交换,也可以记录最小的数据下标,遍历之后再交换以减少交换次数

冒泡排序:

1 #include<stdio.h> 2 3 int main(int argc, const char *argv[]) 4 { 5 int a[9]={5,2,6,8,3,9,1,4,7}; 6 int i; 7 int len =sizeof(a)/sizeof(a[0]); //获取数组长度 8 int j; 9 for(j=len;j>1;j--) //控制未排序数组的位置,使得程序不在有序位置进行对比 10 { 11 for(i=0;i<j-1;i++) //在未排序数组中逐个对比 12 { 13 if (a[i]>a[i+1]) 14 { 15 int t = a[i]; 16 a[i]=a[i+1]; 17 a[i+1]=t; 18 //交换 19 } 20 } 21 } 22 for(i=0;i<len;i++) //打印数组 23 { 24 printf("a[%d] = %d\n",i,a[i]); 25 } 26 return 0; 27 } 28 //冒泡排序,核心思想在于让较大的数交换到右边,然后最右侧就有部分是有序的,下一次不需要再检查有序部分,循环进行此步骤让整个数组有序

冒泡排序基本流程:两数对比,排序(顺序不符的情况下交换),i++对比下一对数,一遍走完之后可以确定最大(小)数在最左(右)边,则可以确定那部分数是有序的,下一次不必再对比。

特点

  • 时间复杂度:O(n²)(最坏),O(n)(最好,已有序时)

  • 空间复杂度:O(1)

  • 稳定排序

插入排序:

1 #include<stdio.h> 2 3 int main(int argc, const char *argv[]) 4 { 5 int a[10]={8,6,0,3,5,2,1,9,7,4}; 6 int b[10]; 7 int i; 8 int j=0; 9 for(i=0;i<10;i++) //a[i]是要插入的数 10 { 11 int t = a[i]; 12 j=i; 13 while(j>0 && t<b[j-1]) //j>0条件是为了防止数组越界,当要插入的数更小时,说明要插入的数应该在对比数的前面,对比数后移让出位置,j--继续对比 14 { 15 b[j]=b[j-1]; 16 j--; 17 } 18 b[j]=t; 19 } 20 for(i=0;i<10;i++) //打印数组b 21 printf(" %d\n",b[i]); 22 return 0; 23 } 24 //插入排序核心思想在于寻找我新拿来要插入的数需要放在已有数组的什么位置,找到位置并空出位置后插入就好了

注意,插入排序初始插入第一个数时,只有一个数所以认为其已排序,然后依次取出元素插入合适位置,保持已排序部分始终有序。

特点

  • 时间复杂度:O(n²)(最坏),O(n)(最好,已有序时)

  • 空间复杂度:O(1)

  • 稳定排序

  • 数据量小或基本有序时效率高

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 23:30:38

AMC1311精密隔离放大器评估板深度解析:从电路设计到PCB布局实战

1. 项目概述&#xff1a;从一份评估板手册到一次深度设计复盘最近在做一个工业电机驱动器的电流采样电路设计&#xff0c;客户对系统的安全性和信号精度要求极高&#xff0c;尤其是主功率侧的高压信号需要安全、无失真地传递到低压控制侧。这让我想起了几年前评估过的一款经典器…

作者头像 李华
网站建设 2026/7/24 23:30:29

FastAPI分层架构实战:高效API开发指南

1.路径讲解boss-api/ ├── main.py # FastAPI应用主入口 │ ├── requirements.txt # Python依赖包 │ └── app/ # 应用核心代码├── __init__.py││├── models/ # 数…

作者头像 李华
网站建设 2026/7/24 23:28:26

灵境1911 短剧工业化系统:AI短剧量产工作流全解析

AI短剧正从"单条手工制作"向"工业化批量生产"演进。据《中国网络视听发展研究报告&#xff08;2026&#xff09;》数据显示&#xff0c;2026年Q1全行业上线微短剧约12.8万部&#xff0c;其中AI短剧约12.2万部&#xff0c;占比超过95%。AI短剧占整个AI行业算…

作者头像 李华
网站建设 2026/7/24 23:28:09

HarmonyOS开发实战:小分享-深浅色主题切换——基于 resources/dark 适配

前言 深浅色主题 是现代移动应用的标配功能&#xff0c;让应用在浅色和深色模式下都有良好的视觉体验。HarmonyOS 通过 resources/dark/ 目录实现主题化资源适配。小分享 App 的 EntryAbility 中设置了 COLOR_MODE_NOT_SET 跟随系统。本篇讲解完整的深浅色适配方案。详细 API …

作者头像 李华
网站建设 2026/7/24 23:27:32

Switch游戏安装终极指南:3分钟学会所有格式兼容方法

Switch游戏安装终极指南&#xff1a;3分钟学会所有格式兼容方法 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装的各种格式头…

作者头像 李华
网站建设 2026/7/24 23:27:31

3步解锁网易云音乐限制:ncmdump让NCM格式音乐重获播放自由

3步解锁网易云音乐限制&#xff1a;ncmdump让NCM格式音乐重获播放自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了喜爱的歌曲&#xff0c;却发现只能在特定客户端播放&#xff1f;ncmdump正是为你解…

作者头像 李华