2.6:冒泡、简选、直插、快排,递归,宏

1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序)

程序代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 void Bubble(int arr[],int len);
  5 void simple_sort(int arr[],int len);
  6 void insert_sort(int arr[],int len);
  7 int one_sort(int arr[],int low,int high);
  8 void output(int arr[],int len);
  9 void quick_sort(int arr[],int low,int high);
 10 int main(int argc, const char *argv[])
 11 {
 12     int arr[]={23,24,12,5,33,5,34,7};
 13     int len=sizeof(arr)/sizeof(arr[0]);
 14 /*  //冒泡排序升序
 15     Bubble(arr,len);
 16     //简单选择排序升序
 17     simple_sort(arr,len);
 18     //直接插入排序升序
 19     insert_sort(arr,len);*/
 20     //快速排序
 21     quick_sort(arr,0,len-1);
 22     //输出
 23     output(arr,len);
 24     return 0;
 25 }
 26 //冒泡排序升序
 27 void Bubble(int arr[],int len)
 28 {
 29     for(int i=1;i<len;i++)
 30     {
 31         for(int j=0;j<len-i;j++)
 32         {
 33             if(arr[j]>arr[j+1])
 34             {
 35                 int t=arr[j];
 36                 arr[j]=arr[j+1];
 37                 arr[j+1]=t;
 38             }
 39         }
 40     }
 41 }
 42 //输出
 43 void output(int arr[],int len)
 44 {
 45     for(int i=0;i<len;i++)
 46     {
 47         printf("%-4d",arr[i]);
 48     }
 49     puts("");
 50 }
 51 //简单选择排序升序
 52 void simple_sort(int arr[],int len)
 53 {
 54     for(int i=0;i<len-1;i++)
 55     {
 56         int min=i;
 57         for(int j=i+1;j<len;j++)
 58         {
 59             if(arr[min]>arr[j])
 60                 min=j;
 61         }
 62         if(i!=min)
 63         {
 64             int t=arr[i];
 65             arr[i]=arr[min];
 66             arr[min]=t;
 67         }
 68     }
 69 }
 70 //直接插入排序升序
 71 void insert_sort(int arr[],int len)
 72 {
 73     //有序序列:第一个    无序序列:剩余元素
 74     for(int i=1;i<len;i++)
 75     {
 76         int j;
 77         int temp=arr[i];//后移,保存第一个插入元素(arr[1])
 78         for(j=i-1;j>=0&&arr[j]>temp;j--)//依次和有序序列倒叙比较后移
 79             arr[j+1]=arr[j];
 80         arr[j+1]=temp;
 81     }
 82 }
 83 //快速排序(基于有序数列)
 84 //一次排序
 85 //返回基准值下标(中间值下标)
 86 int one_sort(int arr[],int low,int high)
 87 {
 88     int key=arr[low];
 89     while(low<high)//low==high结束
 90     {
 91         while(low<high&&key<=arr[high])//倒叙比较
 92             high--;
 93         arr[low]=arr[high];
 94         while(low<high&&key>=arr[low])//正序比较
 95             low++;
 96         arr[high]=arr[low];
 97     }
 98     arr[low]=key;
 99     return low;
100 }
101 //快排
102 void quick_sort(int arr[],int low,int high)
103 {
104     //判空判一
105     if(low>=high)
106         return;
107     //一次排序
108     int mid=one_sort(arr,low,high);
109     //递归左子序列
110     quick_sort(arr,low,mid-1);
111     //递归右子序列
112     quick_sort(arr,mid+1,high);
113 }  

运行结果:

2.递归函数计算非负整数各个位之和

程序代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 int DigitSum(int n);
  5 int main(int argc, const char *argv[])
  6 {
  7     int n;
  8     printf("please enter n:");
  9     scanf("%d",&n);
 10     if(n<0)
 11         printf("num error\n");
 12     else
 13     {   
 14         int sum=DigitSum(n);
 15         printf("%d\n",sum);
 16     }
 17     return 0;
 18 }
 19 int DigitSum(int n)
 20 {   
 21     if(n==0)
 22         return 0;
 23     else
 24         return n%10+DigitSum(n/10);
 25 }    

运行结果:

3.写一个宏,实现int型整数的二进制位的奇数位和偶数位交换

程序代码:

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 #define SWAP(n) (((n & 0xaaaaaaaa) >> 1) | ((n & 0x5
  5 int main(int argc, const char *argv[])
  6 {
  7     int n;
  8     printf("please enter n:");
  9     scanf("%d",&n);
 10     int ret=SWAP(n);
 11     printf("ret=%d\n",ret);
 12     //5:0101奇数位为1
 13     //a:1010偶数位为1
 14     //一个整数32位,十六进制:0x55555555,0xaaaaaaaa
 15     //&:按位与全1为1,其余为0
 16     //0x55555555 & n :保留奇数位
 17     //0xaaaaaaaa & n :保留偶数位
 18     //再位运算,奇数位左移1(<<)奇变偶
 19     //         偶数位右移1 (>>) 偶变奇
 20     //再按位或|,有1为1,全0为0,合并一起
 21 
 22     return 0;
 23 } 

运行结果:

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

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

相关文章

ARP毒化

ARP毒化虽然是一种比较老的渗透测试技术&#xff0c;但是在信息搜集方面能发挥出 很不错的效果。通过ARP毒化技术分析并提取内网流量中的敏感信息&#xff0c;往往会有 许多意外的“ 收获”。 9.2.1 工作原理 ARP&#xff08;地址解析协议&#xff09;是数据链路层的协议&am…

【C中二三事】指针专题

指针专题 在 C 中&#xff0c;指针概念一直处于不佳而或缺的地位&#xff0c;本文就指针这一主题&#xff0c;记录下C语言在指针编程中的小细节。 文章目录 指针专题场景一解 场景二解 场景三解 场景四解 场景五解 场景六解 场景七解 场景一 ​ ∗ p *p ∗p 自增的是 p p p…

工业互联网IoT物联网设备网络接入认证安全最佳实践

制造业数字化转型过程中&#xff0c;产线物联网&#xff08;IoT&#xff09;设备、工控机的引入极大提高了生产效率的同时&#xff0c;也埋下了不容忽视的安全隐患。尤其制造业已成为勒索软件攻击的重灾区&#xff0c;利用物联网设备漏洞进行恶意攻击的事件不胜枚举&#xff0c…

java---查找算法(二分查找,插值查找,斐波那契[黄金分割查找] )-----详解 (ᕑᗢᓫ∗)˒

目录 一. 二分查找&#xff08;递归&#xff09;&#xff1a; 代码详解&#xff1a; 运行结果&#xff1a; 二分查找优化&#xff1a; 优化代码&#xff1a; 运行结果&#xff08;返回对应查找数字的下标集合&#xff09;&#xff1a; ​编辑 二分查找&#xff08;非递归…

Nacos1.X源码解读(待完善)

下载源码 1. 克隆git地址到本地 # 下载nacos源码 git clone https://github.com/alibaba/nacos.git 2. 切换分支到1.4.7, maven编译(3.5.1) 3. 找到启动类com.alibaba.nacos.Nacos 4. 启动VM参数设置单机模式, RUN 启动类 -Dnacos.standalonetrue 5. 启动本地服务注册到本…

SpringFramework实战指南(六)

SpringFramework实战指南(六) 4.4 基于 配置类 方式管理 Bean4.4.1 完全注解开发理解4.4.2 实验一:配置类和扫描注解4.4.3 实验二:@Bean定义组件4.4.4 实验三:高级特性:@Bean注解细节4.4.5 实验四:高级特性:@Import扩展4.4.6 实验五:基于注解+配置类方式整合三层架构组…

浅谈——开源软件的影响力

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

二叉树OJ题(1)

目录 1.相同的树 2.对称二叉树 3.翻转二叉树 4.另一颗树的子树 题目代码思路整体分析&注意事项易错点画图递归分析 树根左子树右子树 分支的思想 多情况考虑 1.相同的树 100. 相同的树 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/same-…

数据结构.树的线索化兄弟表示法哈夫曼树

一、线索化 二、树的逻辑结构 三、哈夫曼树

JSDoc 注释规范

JSDoc 注释 在 前端项目中&#xff0c;注释格式包含了一些特殊标记&#xff0c;如 param、returns 等&#xff0c;这种注释通常是用来标记函数或方法的参数和返回值的数据类型和描述。 这种注释格式通常被称为 JSDoc 注释。在实际开发中&#xff0c;这样的注释可以被一些工具解…

购物车商品数量为0判断是否删除

当编辑商品的数量为1&#xff0c;再减的话&#xff0c;我们搞个模态提示&#xff0c;让用户决定是否要删除这个商品&#xff1f; //商品数量的编辑功能handleItemNumEdit(e){const {operation,id}e.currentTarget.dataset;console.log(operation,id);let {cart}this.data;let …

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器 文章目录 STM32 硬件随机数发生器前言第1章 随机数发生器简介1.1 RNG主要特性1.2.RNG应用 第2章 RNG原理框图第3章 RNG相关寄存器3.1 RNG 控制寄存器 (RNG_CR)3.2 RNG 状态寄存器 (RNG_SR)3.3 RNG 数据寄存器 (RNG_DR) 第3章 RNG代码部分第4章 STM32F1 …

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测

多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测 目录 多维时序 | MATLAB实现基于CNN-LSSVM卷积神经网络-最小二乘支持向量机多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LSSVM卷积神经…

有趣的CSS - 多彩变化的按钮

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 、:active 伪选择器以及 animation 、transition 属性来让背景色循环快速移动形成视觉效果。 核心代码部分&#xff0c;简要说明了写法思路&…

生存类游戏《幻兽帕鲁》从部署服务器到开始体验全过程

SteamDB数据显示&#xff0c;《幻兽帕鲁》上线24小时内&#xff0c;在线人数峰值便突破200万&#xff0c;跻身Steam历史排行榜第二位。随着热度进一步发酵&#xff0c;《幻兽帕鲁》官方发布推文称&#xff0c;游戏发售不到6天&#xff0c;销量已经突破了 800万份。欢迎大家在阿…

问题:以下关于搜索OCPC说法错误的是()? #知识分享#知识分享#媒体

问题&#xff1a;以下关于搜索OCPC说法错误的是&#xff08;)&#xff1f; A&#xff0e;OCPC进入第二阶段&#xff0c;不能随意更换转化目标和页面 B&#xff0e;OCPC可以直接跳过第一阶段&#xff0c;直接开始跑第二阶段 C&#xff0e;开启OCPC计划后&#xff0c;系统就会…

零基础学编程从哪里入手,在学习中可以线上会议答疑解惑

一、前言 零基础学编程可以先从容易学的语言入手&#xff0c;比如中文编程&#xff0c;然后再学其他编程语言则会比较轻松&#xff0c;初步掌握编程思路。很多IT人士一般学2到3种编程语言。 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接…

java内部类概述及使用方法

前言&#xff1a; 打好基础&#xff0c;daydayup! 内部类 内部类概述&#xff1a; 内部类是类的五大成分之一&#xff08;成员变量&#xff0c;方法&#xff0c;构造器&#xff0c;内部类&#xff0c;代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff…

虚拟飞控计算机:飞行控制系统验证与优化的利器

01.背景介绍 随着航空技术的飞速发展&#xff0c;飞行控制系统作为飞机的心脏&#xff0c;全面负责监测、调整和维持飞行器的姿态、航向、高度等参数&#xff0c;用以确保飞行的安全和稳定。为了满足这些要求&#xff0c;现代飞控系统通常采用先进的处理器和外设来确保其高效、…

DAY5.

握手&#xff1a; 第一次握手&#xff1a;客户端发送SYN包给服务器&#xff0c;并进入SYN_SENT状态&#xff0c;等待服务器返回确认包。 第二次握手&#xff1a;服务器接收到SYN包&#xff0c;确认客户端的SYN&#xff0c;发送ACK包&#xff0c;同时发送一个SYN包&#xff0c;…