当前位置: 首页 > web >正文

基础排序--冒泡--选择--插入

1、冒泡排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>//冒泡排序
void bubblesort(int q[],int N) 
{int temp = 0;for(int i = 0;i<N-1;i++){for(int j = 0;j<N-i-1;j++){if(q[j]>=q[j+1])  //注意这里不要写成j++ {temp = q[j];q[j] = q[j+1];q[j+1] = temp;}}}}int main()
{int q[5] = {100,500,10,30,455};int n = sizeof(q) / sizeof(int);bubblesort(q,5);for(int i = 0;i<n;i++){printf("%d ",q[i]);}return 0;
}

2、选择排序

外层大循环是n-1次 (因为是两两对比)

内层小循环是从第二个元素开始

思路:将当前未排序区间的第一个元素,设置为最小值

然后从第二个元素开始对比,然后将对比出的最小值,与这个区间的第一个元素交换即可

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>//冒泡排序
void selectsort(int q[],int N) 
{int minIndex = 0;int temp;for(int i = 0;i<N-1;i++){//假设未排序区间第一个元素是最小值minIndex = i;//从第二个元素开始对比 for(int j = i+1;j<N;j++){if(q[j]<q[minIndex]){minIndex = j;}}// 将找到的最小值与未排序区间的第一个元素交换temp = q[minIndex];q[minIndex] = q[i];q[i] = temp;}
}int main()
{int q[5] = {1,500,10,30,455};int n = sizeof(q) / sizeof(int);selectsort(q,5);for(int i = 0;i<n;i++){printf("%d ",q[i]);}return 0;
}

3、插入排序

思路:将数组分为‘已排序区间’和‘未排序区间’,每次从未排序区间取一个元素,插入到已排序区间的合适位置,直到所有元素排序完成

默认第一个元素已排序,从第二个元素开始

设立一个下标 J , 表示已排序区间的最后一位

如果 J 的值 大于当前要比较的值,那么我们将 q【j】这一位往后移,同时 j-- ,继续向前比较

如果不用再比较了,那么直接让q[j+1]这一位原来的 q【j】 的值变成current的值即可

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>//插入排序
void insertsort(int q[],int n)
{int i,j,current;//未排序区间的第一个元素(从1开始,0号元素默认已排序)for(i=1;i<n;i++){current = q[i];j = i-1;  //j是已排序区间末尾下标 //内层循环while(j>=0 && q[j] > current){q[j+1] = q[j]; //元素后移一位 j--; //继续向前比较 } // 将current插入到正确位置(j+1是插入索引)q[j+1] = current;
}} int main()
{int q[5] = {1,500,1022,30,455};int len = sizeof(q) / sizeof(q[0]);insertsort(q,len);for(int i = 0;i<len;i++){printf("%d ",q[i]);}return 0;
}

http://www.xdnf.cn/news/20205.html

相关文章:

  • 【算法--链表】25.K个一组翻转链表--通俗讲解
  • Linux初始化配置——RHEL7.9、9.3环境部署
  • 【C语言】 第三课 函数与栈帧机制详解
  • RTP打包与解包全解析:从RFC规范到跨平台轻量级RTSP服务和低延迟RTSP播放器实现
  • Deeplizard深度学习课程(七)—— 神经网络实验
  • 飞算JavaAI全面解析:重塑Java开发流程的智能引擎
  • 商城源码后端性能优化:JVM 参数调优与内存泄漏排查实战
  • List<?>和List<Object>区别
  • 第二阶段WinForm-12:UI控件库
  • 力扣516 代码随想录Day16 第一题
  • 【涂鸦T5】6. lvgl显示光感数值
  • 鸿蒙:AppStorageV2状态管理和数据共享
  • Gmail 数据泄露安全警报以及启示
  • 【Linux】线程概念与控制
  • 代码随想录刷题Day49
  • house (ai)
  • 对话Michael Truell:23岁创立Cursor,与Github Copilot竞争
  • 【C++上岸】C++常见面试题目--算法篇(第十九期)
  • 2025年8月文章一览
  • 深度学习:自定义数据集处理、数据增强与最优模型管理
  • 数据旁路(Data Bypassing)是什么?
  • 安装3DS MAX 2026后,无法运行,提示缺少.net core的解决方案
  • 2025年数学建模国赛C题第二版本超详细解题思路
  • Qwen-agent 核心功能分析学习
  • 从零开始学无监督学习:图像混合与标签平滑技术详解,收藏不走丢
  • C++开发中的常用设计模式:深入解析与应用场景
  • javaweb基础第一天总结(HTML-CSS)
  • SpringBoot中 Gzip 压缩的两种开启方式:GeoJSON 瘦身实战
  • 基于网络原理——HTTP/HTTPS的Web服务搭建与核心技术实践
  • Ubuntu 使用 Samba 共享文件夹