当前位置: 首页 > 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.rkmt.cn/news/132851.html

相关文章:

  • Day8 判断集合成员 -卡码网C++基础课
  • 《C语言程序设计》琐碎知识点总结笔记
  • 基于Java+SSM+SSM线上管理系统(源码+LW+调试文档+讲解等)/线上管理平台/在线管理系统/线上管理软件/网络管理系统/线上办公系统
  • 算法:2.复写零
  • ExcalidrawAPI文档配图:接口调用流程展示
  • Day8 出现频率最高的字母 -卡码网C++基础课
  • 基于Java+SSM+SSM短剧推荐系统(源码+LW+调试文档+讲解等)/短剧推荐算法/短剧推荐平台/短剧推荐服务/短剧推荐模型/短剧智能推荐
  • Day2:语言数据类型和变量
  • Excalidraw思维导图玩法:结构化思考新工具
  • Excalidraw常见问题汇总:官方FAQ精华整理
  • 基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)
  • Excalidraw热力图模拟:用户行为分布示意
  • 递归算法和回溯算法
  • 跟着Datawhale动手学Ollama - TASK4: Ollama 在 LangChain 中的使用
  • 分层模糊系统:梯度下降与递推最小二乘法联合辨识研究(Matlab代码实现)
  • cesium126,240506,Ce for Ue 建筑单体高亮的实现P1-基础染色:
  • Excalidraw用户体验监控:前端性能指标采集
  • Excalidraw类图绘制:面向对象设计辅助
  • 基于Spring Boot技术的数字乡村农作物智慧管理系统设计毕设
  • A server error occurred. Please contact the administrator的问题解决
  • 基于Spring Boot的医院预约挂号系统的设计与实现毕业设计源码
  • PyTorch中通过设置随机种子使训练结果可复现
  • ExcalidrawOKR目标看板:团队目标对齐工具
  • 基于Spring Boot的在线考试系统设计与实现毕业设计
  • 2025年度绵阳高中复读学校口碑推荐榜单,名办高中/学校/实验中学/高中复读学校/中学/实验学校/高中高中复读学校企业怎么选择 - 品牌推荐师
  • 利用 SSI-COV 算法自动识别线状结构在环境振动下的模态参数研究(Matlab代码实现)
  • 精品UI知识付费系统源码 响应式视频教程知识付费软件下载网站模板
  • 基于Spring Boot的新生报到管理系统的设计与实现毕业设计源码
  • ATTCK实战系列(一)红日靶场1
  • Excalidraw CI/CD流水线搭建:代码变更自动部署