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

笨人小白的温故知新——排序(3)

我来啦!今天依旧是1177:奇数单增序列的一题多解。

(不厌其烦地附上题目)

【题目描述】

给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。

【输入】

第1行为 N;

第2行为 N 个正整数,其间用空格间隔。

【输出】

增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。

【输入样例】

10 1 3 2 6 5 4 9 8 7 10

【输出样例】

1,3,5,7,9

方法四:冒泡排序

我在大佬源代码的基础上,将q[j]与q[j+1]的复制与赋值换成了swap()函数!嘻嘻,我会a little bit举一反三了!

这个flag是用来判断当前数组是否已经有序的,其实没有flag也不影响理解哒!

#include <iostream> #include <algorithm> using namespace std ; void bubblesort(int q[] , int n){ for(int i = 0 ; i < n - 1 ; i ++){ bool flag = true ; //用一个flag来判断当前数组是否已经有序,有序则推退出循环 for(int j = 0 ; j < n - 1 ; j ++){ if(q[j] > q[j+1]){ swap(q[j] , q[j+1]) ; flag = false ; } } if(flag) break ; } } int main(){ int n , len , k = 0 ; cin >> n ; len = n ; int* a = new int[n] ; while(n --) scanf("%d" , &a[k++]) ; bubblesort(a , len) ; int first = 1 ; for(int i = 0 ; i < len ; i ++){ if(a[i] % 2 == 1){ if(first == 1){ first = 0 ; printf("%d", a[i]) ; continue ; } else printf(",%d" , a[i]) ; } } return 0 ; }

方法五:希尔排序

看了希尔排序的动画后,就觉得这玩意儿 和插入排序怎么那么像,看到它的模板代码后发现,这俩真的超级像!

希尔排序比插入排序多的一个地方是增量gap。希尔排序每次都选择gap/2作为它的步长(初始的gap为n/2),根据这个步长分组进行排序,使得每次排序的工作量都比较小。

#include <iostream> #include <algorithm> using namespace std ; void shellsort(int q[] , int n){ for(int gap = n/2 ; gap >= 1 ; gap/=2){ for(int i = gap ; i < n ; i += gap){ int temp = q[i] ; int pre = i - gap ; while(pre >= 0 && q[pre] > temp){ q[pre+gap] = q[pre]; pre -= gap ; } q[pre + gap] = temp ; } } } int main(){ int n , len , k = 0 ; cin >> n ; len = n ; int* a = new int[n] ; while(n --) scanf("%d" , &a[k++]) ; shellsort(a , len) ; int first = 1 ; for(int i = 0 ; i < len ; i ++){ if(a[i] % 2 == 1){ if(first == 1){ first = 0 ; printf("%d", a[i]) ; continue ; } else printf(",%d" , a[i]) ; } } return 0 ; }

方法五:选择排序

#include <iostream> #include <algorithm> using namespace std ; void selectionsort(int q[] , int n){ for(int i = 0 ; i < n ; i ++){ int min = i ; for(int j = i+1 ; j < n ; j ++){ if(q[j] < q[min]) min = j ; } int temp = q[min] ; q[min] = q[i] ; q[i] = temp ; } } int main(){ int n , len , k = 0 ; cin >> n ; len = n ; int* a = new int[n] ; while(n --) scanf("%d" , &a[k++]) ; selectionsort(a , len) ; int first = 1 ; for(int i = 0 ; i < len ; i ++){ if(a[i] % 2 == 1){ if(first == 1){ first = 0 ; printf("%d", a[i]) ; continue ; } else printf(",%d" , a[i]) ; } } return 0 ; }
http://www.jsqmd.com/news/120690/

相关文章:

  • Day8 判断集合成员 -卡码网C++基础课
  • Excalidraw网格与参考线:辅助精确定位
  • opencv和摄影测量坐标系的转换
  • Excalidraw直线箭头样式:多种类型任你选
  • 【开源免费】基于 STM32的远程环境监测系统(环境数据的实时感知与远程监测)
  • ExcalidrawAPI文档配图:接口调用流程展示
  • Excalidraw商业模式画布:创业团队战略讨论
  • aws 配置导出的SSL证书
  • Excalidraw家庭教育计划:孩子成长路径设计
  • Excalidraw思维导图玩法:结构化思考新工具
  • CSAPP 异常控制流
  • 基于Java+SpringBoot+SSM高校科研管理系统(源码+LW+调试文档+讲解等)/高校科研管理平台/高校科研信息管理系统/高校科研项目管理系统/高校科研成果管理系统/高校科研数据管理系统
  • 3.7 分段 Segmentation
  • Excalidraw常见问题汇总:官方FAQ精华整理
  • 从人到人机再到人机环境:东西方思想的融合
  • 近两百万人围观的Karpathy年终大语言模型清单,主角是它们
  • Excalidraw鱼骨图绘制:根本原因分析法实践
  • Excalidraw暗黑模式设置:夜间使用的护眼方案
  • Excalidraw与AI结合前景:未来功能演进预测
  • 分层模糊系统:梯度下降与递推最小二乘法联合辨识研究(Matlab代码实现)
  • Excalidraw用户体验监控:前端性能指标采集
  • Excalidraw类图绘制:面向对象设计辅助
  • 远程连接内网服务器
  • Excalidraw构建流程分析:Webpack/Vite打包配置
  • 基于Spring Boot技术的数字乡村农作物智慧管理系统设计毕设
  • 【自动驾驶基础】LDM(Latent Diffusion Model) 要点总结
  • Linux中级の配置四层负载均衡(Nginx做的假四层)
  • ExcalidrawOKR目标看板:团队目标对齐工具
  • Excalidraw网格与参考线设置:提升对齐精度
  • 【电力系统】采用有源电力滤波器抑制谐波研究(Simulink仿真实现)