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

04数据结构

冒泡排序 : 两两比较

逻辑 : 给数组中的元素做两两比较,从首个元素开始,小的排前,大的排后,依次两两比较,比完整组后,元素做比较的次数减一,再循环此过程直到比

#include <stdio.h> void printArray(int* arr,int length) { //判断数组中是否有元素 if (length == 0) { printf("arr:[]\n"); return; }//有元素-开始打印 printf("["); for (int i = 0; i < length; i++) { printf("%d",arr[i]); if (i == length - 1) { printf("]\n"); } else { printf(", "); } } } void bubbleSort(int* arr,int length) { //第一次冒泡排序,次数是长度减一 for (size_t j = 0; j < length - 1; j++) { //每此循环减一次长度,每次循环大数都往后挪 for (size_t i = 0; i < length - 1 -j ; i++) { if (arr[i] > arr[i+1]) { int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } } int main() { int arr[] = {1,2,3,4,5,6,7,8,9}; printArray(arr,9); bubbleSort(arr,9); printArray(arr,9); return 0; }

快速排序 : 每次做基准数归位

基准数 : 通常定义序列的第一个元素作为基准数,数组中第二个元素[start]开始往后找比基准数大的数找到停止,最后数组中一个元素[end]开始往前找比基准数小的数,找到停止,特殊情况start和end没相遇时,看end最后停的位置,找到位置后交换基准数完成归位操作

完成基准数归位操作后,对序列做分割,基准数前的为前序列,后的为后序列,并对每个前后序列再次做基准数归位,前序列的索引范围结束索引减一, 后序列的索引范围起始索引加一

快速排序具有二分性,每此归为基准数都将序列一分为二,随着每次一分为二索引的数据规模呈指数级减小

#include <stdio.h> void printArray(int *arr, int length) { if (length == 0) { printf("arr : []\n"); } printf("["); for (int i = 0; i < length; i++) { printf("%d", arr[i]); if (i == length - 1) { printf("]\n"); return; } else { printf(", "); } } } void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void quickSort(int *arr, int start, int end) { // 出口 if (start >= end) { return; } // 写规律 int low = start; int high = end + 1; while (1) { while (low < end) { low++; if (arr[low] > arr[start]) { break; } } while (high > start) { high--; if (arr[high] < arr[start]) { break; } // 走到这里说明arr[low]>[high],arr[high]<arr[low],需要分别交换指向的元素 // 大前提 : low和high都停下,且low比high小,说明没找到基准数的位置 } if (low < high) { swap(&arr[low], &arr[high]); } else { // 说明low和high没越过 break; } } // 从循环出来说明基准书的位置找到了 // 交换基准数和相遇位置 // 基准数归为操作 swap(&arr[start], &arr[high]); // 升序要和high交换位置[high找小数],降序要和low[low找大] // 递归代码 quickSort(arr, start, high - 1); quickSort(arr, high + 1, end); } int main() { int arr[] = {123, 456, 879, 521, 654, 4, 154, 5, 8541}; int length = sizeof(arr) / sizeof(arr[0]); quickSort(arr, 0, length - 1); printArray(arr, length); printf("%d\n", length); return 0; }
http://www.jsqmd.com/news/1314579/

相关文章:

  • 2026美国本科申请规划,北京留学中介推荐参考 - 2027品牌AI展
  • 基于Xadow与QMC5883L的电子罗盘:模块化硬件的高精度航向感知实践
  • Arduino驱动LED点阵屏:Rainbowduino v3.0硬件解析与项目实战
  • ClickHouse-Java客户端连接诊断实战:5大异常场景深度解析与高效解决方案
  • MPR121电容触摸传感器:从原理到实战,打造稳定交互体验
  • 快慢指针与链表反转:O(1)空间复杂度判断回文链表详解
  • 东莞医院搬家
  • 商业综合体舞台LED显示系统设计分析
  • OBS实时字幕插件完全指南:3步实现专业直播字幕
  • 2026淮南中考100分左右还能读什么学校? 合肥这所公办院校8月补录中 - 小张zc
  • 国产GPU生态现状与开发者实践:从燧原过会看AI算力国产化
  • Java基础1(变量-方法)
  • C语言开发者必备硬件知识:面试高频考点与系统思维构建
  • ACE-Guard限制器:腾讯游戏性能优化终极指南,告别卡顿提升流畅度
  • ysl 包包二手回收估价参考,2026 宁波实地测评,轻奢包包出手找易奢福 - 肉松卷
  • 单片机毕业设计-基于 STM32F103 的智能温控风扇监测系统设计 基于 DHT11 的室内温湿度调控硬件系统实现(018501)
  • 上饶消防设施操作员备考择校指南:基于4大核心维度甄选优质培训资料
  • 三步轻松备份QQ空间历史说说:GetQzonehistory终极指南
  • MATLAB代码格式化终极指南:如何快速美化你的MATLAB代码
  • 如何快速提升华硕笔记本性能:终极轻量级控制工具完整指南
  • C++ static_assert编译期断言原理与应用场景深度解析
  • 华为交换机端口安全配置:静态、粘性、动态绑定模式详解与实战
  • AI搜索来源多样性规划工具:从输入校验到离线报告的完整实现
  • 不出户知天下:道德经47章的内观智慧
  • 2026墙面发霉反复复发?多半是外墙/卫生间暗漏在作祟,贵阳业主必看 - 筑宅安
  • Godot协程实战:从yield到await,掌握游戏异步编程核心
  • MCP协议到底是什么?2026年AI Agent最热门的工具接入标准详解
  • 肺部疾病多模态医学数据
  • 2026年健康管理公司行业深度解构:细胞大健康领域全景硬核透视
  • 大麦网自动抢票终极指南:告别手速,用Python实现秒级抢票