C语言排序算法

 int main()
{
    int i;
    int arr[]={49,38,65,97,76,13,27,49};
    int n=sizeof(arr)/sizeof(arr[0]);
    //数据开始的排列
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    //排序后
    InsertSort(arr,n);//直接插入排序
    BinarySearch(arr,n);//折半查找排序
    ShellSort(arr,n);//希尔排序
    BubbleSort(arr,n);//冒泡排序
    int low=0;
    int high=n-1;
    QuickSort(arr,low,high);//快速排序
    //若每一次选中的枢轴元素能将待排序列划分为均匀的两个部分,递归深度最低,效率最高
    printf("快速排序:>");
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    SimpleSelectSort(arr,n);//简单选择排序
    return 0;
}

//排序算法
#include <stdio.h>
#include <string.h>
//直接插入排序:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成
//空间复杂度O(1),时间复杂度:最好情况是原本有序--O(n),最坏情况逆序--O(n^2),平均时间复杂度--O(n^2);,s算法稳定性--稳定
void InsertSort(int arr[],int n)
{int i,j,temp;for(i=1;i<n;i++)//遍历元素{if(arr[i]<arr[i-1])//若当前关键字小于前驱{temp=arr[i];//temp暂存当前元素for(j=i-1;j>=0&&arr[j]>temp;--j)//检查当前元素前驱的所有元素{arr[j+1]=arr[j];//大于temp的后移}arr[j+1]=temp;//将temp复制到插入位置}}//打印printf("直接插入排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");
}
//思路:先用折半查找找到应该插入的位置,再移动元素
//时间复杂度O(n^2),空间复杂度O(1);
void BinarySearch(int arr[],int n)
{int i,j,low,high,mid;int temp;for(i=1;i<n;i++)//依次排序{temp=arr[i];//暂存当前元素low=0;high=i-1;//设置折半查找的位置while(low<=high)//结束条件{mid=(low+high)/2;//取中间点if(arr[mid]>temp)//查找左半子表high=mid-1;else//查找右半子表,/当arr[mid]==temp;为了保证稳定性,应继续在mid所指位置右边寻找插入位置low=mid+1;}for(j=i-1;j>high+1;j--)arr[j+1]=arr[j];//统一后移元素,空出插入位置arr[j+1]=temp;//插入操作}//打印printf("折半排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");
}
//希尔排序:先追求表中元素部分有序,再逐渐逼近全局有序
//先将待排序表分割成若干如i,i+d,i+2d....的特殊子表,对各个子表分别进行直接插入排序
//缩小增量d直到d=1
//空间复杂度O(1),时间复杂度不确定:最坏O(n^2),稳定性:不稳定。仅适用于顺序表
void ShellSort(int arr[],int n)
{int d,i,j;for(d=n/2;d>=1;d=d/2)//步长变化for(i=d;i<n;i++)if(arr[i]<arr[i-d])//需要=将arr[i]插入有序增量表中{int temp=arr[i];//暂存在tempfor(j=i-d;j>0&&arr[j]>temp;j=j-d){arr[j+d]=arr[j];//记录后移}arr[j+d]=temp;//插入}//打印printf("希尔排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");
}
//根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置
//空间复杂度O(1),时间复杂度:最好情况有序,O(n),最坏情况逆序O(n^2),平均时间复杂度O(n^2);
void BubbleSort(int arr[],int n)
{int i,j;int flag=1;for(i=0;i<n-1;i++)//n个元素进行n-1趟{for(j=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){int temp=arr[j+1];arr[j+1]=arr[j];arr[j]=temp;flag=0;}}if(flag==1)//没有进入说明已经有序break;}//打印printf("冒泡排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");
}
//在待排序表中,任取一个元素作为枢轴(通常取首元素),通过一趟排序将待排序表划分为独立的
//两部分L(1...k-1),L(k+1...n),使得L(1...k-1)中所有的元素小于枢轴元素,使得L(k+1...n)的元素都大于等于枢轴元素
//枢轴元素放在了最终位置k上,这个过程为一次划分然后递归
//空间复杂度=O(递归层数),最少递归层数log2(n)+1,最大递归层数n,时间复杂度=O(n*递归层数)
//最好时间复杂度O(n*log2(n)),最坏时间复杂度O(n^2);,最好空间复杂度O(log2(n)),最坏O(n);
//稳定性:不稳定
int Partition(int arr[],int low,int high)
{int pivot=arr[low];//枢轴元素while(low<high)//用low和high搜索枢轴最终位置{while(low<high&&arr[high]>=pivot)--high;arr[low]=arr[high];//比枢轴小的元素移动到左端while(low>high&&arr[low]<=pivot)++low;arr[high]=arr[low];//比枢轴大的元素移动到右边}arr[low]=pivot;//枢轴元素存放最终位置return low;//返回枢轴元素存放的最终位置
}
void QuickSort(int arr[],int low,int high)//范围0到n-1
{if(low<high)//递归跳出的条件{int pivotpos=Partition(arr,low,high);//划分子表QuickSort(arr,low,pivotpos-1);//划分左子表QuickSort(arr,pivotpos+1,high);//划分右子表}
}
//思想:每一趟在在排序元素中选择关键字最大或最小的元素假如有序子序列中
//空间复杂度:O(1)时间复杂度O(n^2);稳定性:不稳定
void SimpleSelectSort(int arr[],int n)
{int i,j;for(i=0;i<n-1;i++){int min=i;for(j=i+1;j<n;j++){if(arr[j]<arr[min])min=j;if(min!=i){int temp=arr[i];arr[i]=arr[min];arr[min]=temp;}}}//打印printf("简单选择排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");
}int main()
{int i;int arr[]={49,38,65,97,76,13,27,49};int n=sizeof(arr)/sizeof(arr[0]);//数据开始的排列for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");//排序后InsertSort(arr,n);//直接插入排序BinarySearch(arr,n);//折半查找排序ShellSort(arr,n);//希尔排序BubbleSort(arr,n);//冒泡排序int low=0;int high=n-1;QuickSort(arr,low,high);//快速排序//若每一次选中的枢轴元素能将待排序列划分为均匀的两个部分,递归深度最低,效率最高printf("快速排序:>");for(i=0;i<n;i++){printf("%d ",arr[i]);}printf("\n");SimpleSelectSort(arr,n);//简单选择排序return 0;
}

c866fa02ee6c43ff9f50b63f2f6587a8.png

 

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

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

相关文章

机器学习-0X-神经网络

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中神经网络算法。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化接口实现 参考 机器学习定义 关于机…

GEE错误——Layer 2: Tile error: Reprojection output too large (10277x10480 pixels).

错误 Layer 2: Tile error: Reprojection output too large (10277x10480 pixels). Layer 2: Tile error: Reprojection output too large (10150x10479 pixels). Output of image computation is too large (18 bands for 3150625 pixels = 240.4 MiB > 80.0 MiB). 如果我…

Oracle P6 负浮时和必须完成日期

前言 学习过计划的人大都有这有这样的经历&#xff0c;即无论是Microsoft Project 亦或是P6见过负浮时那么 Primavera P6 计划中的负浮时是从何而来的呢&#xff0c;那么本文可能会有所帮助。 首先&#xff0c;当活动的最晚日期早于最早日期时&#xff0c;就会出现负浮时。 换…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

docker harbor.v2.9.2搭建镜像无法下载问题解决

在通过部署docker harbor时&#xff0c;采用的是离线包的方式&#xff0c;当解压压缩包后&#xff0c;执行prepare脚本步骤中有一步是要获取prepare:v2.9.2版本镜像 结果执行脚本时报如下错误&#xff1a; Unable to find image goharbor/prepare:v2.9.2 locally 这时候我们就…

算法思想总结:二分查找算法

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、二分查找算法思路总结 大家先看总结&#xff0c;然后再根据后面的题型去慢慢领悟 二、二分查找&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09;二分查找 思路&#xff1a;&#xff08;模…

每日学习笔记:C++ STL 的forward_list

定义 特点 操作函数 元素查找、移除或安插 forward_list::emplace_after arg...指的是元素构造函数的参数&#xff08;0~N个&#xff09; #include <iostream> #include <memory> #include <list> #include <forward_list> using namespace std;class…

海思3516将BT1120改BT656输出大小为720*576

sample_comm_vi.c结构体 VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX {/* interface mode */VI_MODE_BT656,/* multiplex mode */VI_WORK_MODE_1Multiplex,/* r_mask g_mask b_mask*/{0xFF0000, 0x0},//掩码根据自己实际写/* progess…

基于YOLOv8深度学习的野外火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

如何有效避免团队内耗,提升团队整体效能

团队内耗是一个普遍存在的问题&#xff0c;它可能导致工作效率低下、沟通不畅、成员间的信任缺失&#xff0c;甚至可能导致整个团队的崩溃。 它可能源于成员间的误解、利益冲突&#xff0c;或是个人情绪的波动。 如何避免团队内耗&#xff0c;是每个团队管理者和成员都应该关…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

人工智能|机器学习——BIRCH聚类算法(层次聚类)

这里再来看看另外一种常见的聚类算法BIRCH。BIRCH算法比较适合于数据量大&#xff0c;类别数K也比较多的情况。它运行速度很快&#xff0c;只需要单遍扫描数据集就能进行聚类。 1.什么是流形学习 BIRCH的全称是利用层次方法的平衡迭代规约和聚类&#xff08;Balanced Iterative…

Prompt Engineering(提示工程)

Prompt 工程简介 在近年来&#xff0c;大模型&#xff08;Large Model&#xff09;如GPT、BERT等在自然语言处理领域取得了巨大的成功。这些模型通过海量数据的训练&#xff0c;具备了强大的语言理解和生成能力。然而&#xff0c;要想充分发挥这些大模型的潜力&#xff0c;仅仅…

【计算机视觉】目标跟踪| 光流算法详细介绍|附代码

0、前言 在上篇文章中https://blog.csdn.net/Yaoyao2024/article/details/136625461?spm1001.2014.3001.5501&#xff0c;我们对目标跟踪任务和目标跟踪算法有了大致的了解。今天我们就来详细介绍一下其中的生成式算法的一种&#xff1a;光流法。 在介绍光流法之前&#xff…

SinoDB V16.8 版本新特性

1、Oracle兼容 兼容 with as 语法 兼容 insert all/first 语法 兼容 () 形式的左外连接和右外连接语法 兼容 ROLLUP/CUBE/GROUPING SETS 语法 兼容 create or replace view/trigger/procedure/function/index 语法 兼容 rename procedure/function 语法 2、新增功能 条…

IMX8MM -- Yocto构建遇见的错误及解决方法:

IMX8MM Yocto构建遇见的错误及解决方法&#xff1a; 1 bison-3.0.4 error2 Opencv BB_NO_NETWORK Error &#xff1a;3 Yocto构建时出现U-boot 问题4 Yocto构建时出现Linux kernel编译问题5 wayland-native6 cross-localedef-native7 wayland-protocols8 mesa 硬件&#xff1a;…

Linux网络配置修改hosts映射文件关闭防火墙

Linux网络配置&系统管理 一、物理机、VMware软件、虚拟机之间的网络关系1.1 总体框架图1.2 为什么物理机、VM软件、客户机之间能够通信?1.3 查看客户机的IP地址ifconfig1.4 小节1.5 修改静态IP地址1.6 测试能不能ping通 二、修改主机名以及hosts映射文件2.1 修改主机名2.1…

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的?

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的&#xff1f; 事件冒泡(Event Bubbling)是指当一个元素上的事件被触发时&#xff0c;该事件会从最底层的元素开始逐级向上传播&#xff0c;直到最顶层的元素(通常是文档对象)被触发。 ​ 例如我们点击一个按钮时&#xff0c;…

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea&#xff0c;mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs&#xff1a; 一个开源、跨平台的 JavaScript 运行时环境&#xff0c;可以理解成java当中需要…