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

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 } 

运行结果:


http://www.kler.cn/news/233785.html

相关文章:

  • VMware虚拟机安装openEuler系统(一)(2024)
  • Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
  • Qt QML学习(一):Qt Quick 与 QML 简介
  • 【资料分享】基于单片机大气压监测报警系统电路方案设计、基于飞思卡尔的无人坚守点滴监控自动控制系统设计(程序,原理图,pcb,文档)
  • MySQL-SQL优化
  • JAVA设计模式之观察者模式详解
  • GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译
  • Unity UGUI实现点击事件穿透
  • java多线程的四种创建方式、程序、线程、进程、并行、串行、Thread、Runnable、Callable、线程池技术
  • 二分查找的应用
  • 二维火API连接,实现无代码开发广告推广与用户运营集成
  • thinkphp数据批量提交(群发消息)
  • 烟火可禁却难禁,灵境难及终将及
  • 17、ELK
  • 785. 快速排序
  • 【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)
  • Spring Boot 自定义指标
  • Matplotlib交互
  • Linux运行级别 | 管理Linux服务
  • Springboot集成rabbitmq
  • linux系统非关系型数据库memcached
  • 【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
  • spring boot学习第十二篇:mybatis框架中调用存储过程控制事务性
  • 六、滚动条操作——调整图像亮度
  • 《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境
  • 架设游戏服务器租用价格?腾讯云和阿里云价格对比
  • 跟着cherno手搓游戏引擎【23】项目维护、2D引擎之前的一些准备
  • 小程序配置服务器域名流程指南
  • 机器学习2---逻辑回归(基础准备)
  • 新概念英语第二册(62)