C语言实现各种排序

文章目录

  • C语言实现各种排序
    • 1、冒泡排序
    • 2、简单选择排序
    • 3、直接插入排序
    • 4、希尔排序
    • 5、快速排序
    • 6、堆排序

C语言实现各种排序

1、冒泡排序

冒大泡(将大的数往后放)

void bubble_sort(int *p,int len){
    for(int i=0;i<len-1;i++){
        for(int j=0;j<len-1-i;j++){
            if(*(p+j)>*(p+j+1)){
                //使用异或运算交换两个的值
                *(p+j)=*(p+j)^*(p+j+1);
                *(p+j+1)=*(p+j)^*(p+j+1);
                *(p+j)=*(p+j)^*(p+j+1);
            }
        }
    }
    return;
}

2、简单选择排序

每次选择一个数组中最大的数或者最小的数与最最后面或最前面的数进行交换

void simple_select_sort(int *p,int len){
int i=0,j=0,k=0;
for(;i<len-1;i++){
    k=i;//k记录起始值
    for(j=i+1;j<len;j++){
        if(*(p+k)>*(p+j)){
            k=j;
        }
    }
    if (k!=i)
    {//交换值
      exchange(p+k,p+i);
    }
    

}
}

3、直接插入排序

void insert_sort(int *p,int len){
int i=0,j=0,temp=0;

for(i=1;i<len;i++){
        temp=*(p+i);
        for (j = i-1; j>=0&&*(p+j)>=temp; j--)
        {
            *(p+j+1)=*(p+j);
        }
         *(p+j+1)=temp;
   
}

}

4、希尔排序

void shell_sort(int *p,int len){
int temp;
int i,j,k;
//k表示分组
for(k=len/2;k>=1;k=k/2){
  for(i=k+1;i<len;i++){
      temp=*(p+i);
      for(j=i-k;j>=0&&*(p+j)>temp;j=j-k){
       *(p+j+k)=*(p+j);
    }
      *(p+j+k)=temp;
    }

}


}

5、快速排序

void quick_sort(int *p,int low,int height){
    int i=low,j=height;
    int key=p[low];
    while(i<j){
        while(i<j&&p[j]>=key){
            j--;
        }
        if (i<j)
        {
            p[i]=p[j];
        }
        while(i<j&&p[i]<=key){
            i++;
        }
        if(i<j){
            p[j]=p[i];
        }        
    }
    p[i]=key;
    if (low<j-1)
    { quick_sort(p, low, j-1);
    }
    if (height>i+1)
    {
     quick_sort(p, i+1,height);
    }
    
    return;



}

6、堆排序

第一个非叶子结点的编号为len/2-1

void heap_sort(int *p,int len){
    int i=0;
    for(i=len/2-1;i>=0;i--){
        heap_adjust(p,i,len-1);
    }
    //将第一个与最后一个交换
    for (i=len-1;i>0;i--)
    {
        exchange(&p[0],&p[i]);//交换值
        heap_adjust(p,0,i-1);
    }
    
}
void heap_adjust(int *p,int start,int end){
    int father_node=start;
    int son_node=father_node*2+1;
    while (son_node<=end)
    {
        //选出子节点最大的那一个
        if (son_node+1<=end&&p[son_node+1]>p[son_node])
        {son_node++;
        }
        if (p[father_node]>p[son_node])
        {
            return;
        }
        else{
            exchange(&p[father_node],&p[son_node]);
            father_node=son_node;
            son_node=father_node*2+1;
        }
        
        
    }
    

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

语音识别的基本概念

语音识别的基本概念​​​​​​​ ​​​​​​​ 言语是一种复杂的现象。人们很少了解它是如何产生和感知的。天真的想法常常是语音是由单词构成的&#xff0c;而每个单词又由音素组成。不幸的是&#xff0c;现实却大不相同。语音是一个动态过程&#xff0c;没有明确区分的…

Spring AI聊天功能开发

一、引入依赖 继承父版本的springboot依赖&#xff0c;最好是比较新的依赖。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePat…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

Spring Boot | Spring Boot 实现 “Redis缓存管理“

目录 : Spring Boot 实现 "Redis缓存管理" :一、Spring Boot 支持的 "缓存组件" &#xff08; 如果 “没有” 明确指定使用自定义的 "cacheManager "或 "cacheResolver" &#xff0c;此时 SpringBoot会按照“预先定义的顺序” 启动一个…

免费SSL证书和付费SSL证书区别在哪

SSL证书免费和付费的区别有&#xff1a; 1.证书类型不同&#xff0c;免费SSL证书只有域名验证性型&#xff0c;付费SSL证书有域名验证型、企业验证型和组织验证型&#xff1b; 2.使用限制不同&#xff0c;免费SSL证书只能绑定单个域名、不支持通配符域名、多域名等&#xff0…

4.28java项目小结

这几天完成了用户修改资料模块的功能&#xff0c;实现了修改用户头像&#xff0c;昵称等信息&#xff0c;并且对数据库进行了操作&#xff0c;大致画了好友资料的页面的内容&#xff0c;这两天尽量完成表的创建&#xff0c;建立多对多的关系&#xff0c;实现好友的添加功能。

代码随想录:二叉树29-30

目录 701.二叉搜索树中的插入操作 题目 代码&#xff08;迭代法走一边&#xff09; 代码&#xff08;递归法走一边&#xff09; 450.删除二叉搜索树中的节点 题目 代码&#xff08;递归法走一边&#xff09; 701.二叉搜索树中的插入操作 题目 给定二叉搜索树&#xff…

centos7 openresty lua 自适应webp和缩放图片

目录 背景效果图准备安装cwebp等命令&#xff0c;转换文件格式安装ImageMagick&#xff0c;压缩文件下载Lua API 操控ImageMagick的依赖包 代码参考 背景 缩小图片体积&#xff0c;提升加载速度&#xff0c;节省流量。 效果图 参数格式 &#xff1a; ?image_processformat,…

在IDEA中使用.env文件导入系统配置的图文教程

JetBrains的IDEA是一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的功能和工具。使用.env文件来管理配置信息在IDEA中非常简单。 旧版本默认支持&#xff0c;新版本idea需要安装插件才可以。 这里我们可以安装EnvFile插件&#xff0c;步骤如下&#xff1a; 在弹…

centos 7 安装 JDK 和Rockmq

1、版本说明 CentOS版本&#xff1a;使用 cat /etc/redhat-release 命令查看centos版本。 本次版本是&#xff1a;CentOS Linux release 7.9.2009 (Core) JDK版本是&#xff1a;jdk-8u401-linux-x64.tar.gz RockeqMQ版本&#xff1a;rocketmq-all-4.9.2-bin-release.zip …

Vue 组件单元测试深度探索:细致解析与实战范例大全

Vue.js作为一款广受欢迎的前端框架&#xff0c;以其声明式的数据绑定、组件化开发和灵活的生态系统赢得了广大开发者的心。然而&#xff0c;随着项目规模的增长&#xff0c;确保组件的稳定性和可靠性变得愈发关键。单元测试作为软件质量的守护神&#xff0c;为Vue组件的开发过程…

人脸识别系统架构

目录 1. 系统架构 1.1 采集子系统 1.2 解析子系统 1.3 存储子系统 1.4 比对子系统 1.5 决策子系统 1.6 管理子系统 1.7 应用开放接口 2. 业务流程 2.1 人脸注册 2.2 人脸验证 2.2.1 作用 2.2.2 特点 2.2.3 应用场景 2.3 人脸辨识 2.3.1 作用 2.3.2 特点 2.3.3…

学习STM32第二十天

低功耗编程 一、修改主频 STM32F4xx系列主频为168MHz&#xff0c;当板载8MHz晶振时&#xff0c;系统时钟HCLK满足公式 H C L K H S E P L L N P L L M P L L P HCLK \frac{HSE \times PLLN}{PLLM \times PLLP} HCLKPLLMPLLPHSEPLLN​&#xff0c;在文件stm32f4xx.h中可修…

HTML 学习笔记

html 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 1.HTML文档的后缀名 (1) .html (2) .htm 这里更推荐使用 ".html "&#xff0c;命名应该遵从含义清…

FPGA 以太网概念简单学习

1 MAC和PHY 从硬件的角度来说&#xff0c;以太网接口电路主要由 MAC &#xff08; Media Access Control &#xff09;控制器和物理层接口 PHY&#xff08;Physical Layer &#xff0c; PHY &#xff09;两大部分构成。 MAC 指媒体访问控制子层协议&#xff0c;它和 PHY 接…

SpringMVC进阶(自定义拦截器以及异常处理)

文章目录 1.自定义拦截器1.基本介绍1.说明2.自定义拦截器的三个方法3.流程图 2.快速入门1.Myinterceptor01.java2.FurnHandler.java3.springDispatcherServlet-servlet.xml配置拦截器4.单元测试 3.拦截特定路径1.拦截指定路径2.通配符配置路径 4.细节说明5.多个拦截器1.执行流程…

刷代码随想录有感(49):找树左下角的值

题干&#xff1a; 用层序遍历方便些&#xff0c;因为只需要把res不断替换成每一层第一个节点值即可&#xff0c;代码如下&#xff1a; class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*>que;if(root ! NULL)que.push(root);int res …

逆向案例三十——webpack登录某游戏

网址&#xff1a;aHR0cHM6Ly93d3cuZ205OS5jb20v 步骤&#xff1a; 进行抓包分析&#xff0c;找到登录接口&#xff0c;发现密码有加密 跟栈分析&#xff0c;从第三个栈进入&#xff0c;打上断点&#xff0c;再次点击登录 明显找到password,它由o赋值&#xff0c;o由a.encode(…

【哈希】Leetcode 面试题 01.02. 判定是否互为字符重排

题目讲解 面试题 01.02. 判定是否互为字符重排 算法讲解 直观的想法&#xff1a;我们找到一个字符串的全排列&#xff0c;然后对比当前的排列是否等于另一个字符串。如果两个字符串如果互为排列&#xff0c;所以我们知道两个字符串对应的字符出现的个数相同&#xff0c;那么…

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层

在config.json文件中配置出来new mars3d.graphic.PolylineCombine({大量线合并渲染类型的geojson图层 问题场景&#xff1a; 1.浏览官网示例的时候图层看到大量线数据合并渲染的示例 2.矢量数据较大量级的时候&#xff0c;这种时候怎么在config.json文件中尝试配置呢&#x…
最新文章