news 2026/7/7 20:34:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笨人小白的温故知新——排序(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 ; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 15:04:53

Excalidraw用户行为分析:高频使用场景统计

Excalidraw用户行为分析&#xff1a;高频使用场景洞察 在远程办公成为常态的今天&#xff0c;团队沟通中的“信息鸿沟”问题愈发突出。一张草图&#xff0c;往往胜过千言万语——但传统绘图工具要么太正式、门槛高&#xff0c;要么协作体验差、延迟严重。正是在这样的背景下&a…

作者头像 李华
网站建设 2026/7/7 12:14:34

Excalidraw字体设置:中文显示优化方案

Excalidraw 字体设置&#xff1a;中文显示优化方案 在远程协作和产品设计日益依赖可视化表达的今天&#xff0c;Excalidraw 凭借其“手绘风”的亲和力与轻量级交互体验&#xff0c;已成为技术文档、架构图绘制乃至头脑风暴中的热门选择。但对中文用户而言&#xff0c;一个长期…

作者头像 李华
网站建设 2026/7/7 10:14:29

最好用的文件同步工具和远程管理工具SyncTunnel,胜过SyncThing和DropBox

目录SyncTunnel是什么优势配置教程1.下载2.安装3.配置3.1 必要配置3.2 进阶配置使用教程文件同步远程控制远程拉取文件尾声SyncTunnel是什么 SyncTunnel是一款跨平台、高效的文件同步工具和远程管理工具,配置和使用十分简便&#xff0c;在许多方面都有优势。 这个工具已经开源…

作者头像 李华
网站建设 2026/7/7 17:09:26

用Excalidraw做头脑风暴:激发团队创意的可视化方法

用Excalidraw做头脑风暴&#xff1a;激发团队创意的可视化方法 在一次远程产品评审会上&#xff0c;五位分布在全球不同时区的工程师围坐在“一张”虚拟白板前。产品经理刚说完“我们需要一个用户注册流程”&#xff0c;AI 就自动生成了带箭头的流程图初稿&#xff1b;架构师随…

作者头像 李华
网站建设 2026/7/7 16:32:13

ExcalidrawAPI文档配图:接口调用流程展示

Excalidraw API文档配图&#xff1a;接口调用流程展示 在技术文档日益成为软件交付核心组成部分的今天&#xff0c;如何高效、准确地生成配套图表&#xff0c;已经成为提升团队协作效率的关键瓶颈。传统绘图工具虽然功能齐全&#xff0c;但操作繁琐、风格僵硬&#xff0c;难以适…

作者头像 李华
网站建设 2026/7/7 15:25:27

如何构建数据驱动的客户管理系统

原文&#xff1a;towardsdatascience.com/how-to-build-a-data-driven-customer-management-system-7d1597998dd5?sourcecollection_archive---------2-----------------------#2024-11-20 客户基础管理 构建具有战略影响的 CBM 系统的高级框架 https://medium.com/hc.ekne?…

作者头像 李华