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

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     else13     {   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     else24         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 & 0x55 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奇数位为113     //a:1010偶数位为114     //一个整数32位,十六进制:0x55555555,0xaaaaaaaa15     //&:按位与全1为1,其余为016     //0x55555555 & n :保留奇数位17     //0xaaaaaaaa & n :保留偶数位18     //再位运算,奇数位左移1(<<)奇变偶19     //         偶数位右移1 (>>) 偶变奇20     //再按位或|,有1为1,全0为0,合并一起21 22     return 0;23 } 

运行结果:

相关文章:

  • Docker 容器网络:C++ 客户端 — 服务器应用程序。
  • 搜索+哈希/平衡树,LeetCode 987. 二叉树的垂序遍历
  • Spring Boot 笔记 010 创建接口_更新用户头像
  • springboot/ssm学生信息管理系统Java学生在线选课考试管理系统
  • Maven详细配置整理
  • ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像
  • SpringBoot 动态加载jar包,动态配置
  • 单片机学习路线(简单介绍)
  • Git分支和迭代流程
  • Xubuntu16.04系统中修改系统语言和系统时间
  • 代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代
  • 嵌入式Qt 第一个Qt项目
  • Android矩阵Matrix动画缩放Bitmap移动手指触点到ImageView中心位置,Kotlin
  • 17 ABCD数码管显示与动态扫描原理
  • 【AI】安装ubuntu20.04教程(未完待续)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【译】理解JavaScript:new 关键字
  • 2017前端实习生面试总结
  • Facebook AccountKit 接入的坑点
  • github指令
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java编程基础24——递归练习
  • Java教程_软件开发基础
  • leetcode讲解--894. All Possible Full Binary Trees
  • MQ框架的比较
  • 大整数乘法-表格法
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 机器学习中为什么要做归一化normalization
  • 漂亮刷新控件-iOS
  • 学习笔记TF060:图像语音结合,看图说话
  • 由插件封装引出的一丢丢思考
  • 智能合约开发环境搭建及Hello World合约
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #{}和${}的区别?
  • ()、[]、{}、(())、[[]]命令替换
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (3)nginx 配置(nginx.conf)
  • (4.10~4.16)
  • (9)目标检测_SSD的原理
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (poj1.3.2)1791(构造法模拟)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (四) 虚拟摄像头vivi体验
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (译)计算距离、方位和更多经纬度之间的点
  • .Net - 类的介绍
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Standard 的管理策略
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 指南:抽象化实现的基类
  • .NET学习全景图
  • .net中的Queue和Stack
  • @Controller和@RestController的区别?