惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Heimdal Security Blog
A
Arctic Wolf
K
Kaspersky official blog
V
Vulnerabilities – Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs
D
Docker
爱范儿
爱范儿
T
Tenable Blog
C
Check Point Blog
B
Blog
C
Cisco Blogs
Vercel News
Vercel News
The Cloudflare Blog
T
Threatpost
NISL@THU
NISL@THU
T
Tor Project blog
V2EX - 技术
V2EX - 技术
P
Palo Alto Networks Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
博客园 - 司徒正美
S
Security @ Cisco Blogs
GbyAI
GbyAI
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
The Register - Security
The Register - Security
Recorded Future
Recorded Future
Cloudbric
Cloudbric
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
Y
Y Combinator Blog
博客园_首页
T
Troy Hunt's Blog
The Hacker News
The Hacker News
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
U
Unit 42
AWS News Blog
AWS News Blog
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
博客园 - 聂微东
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell

Posts on WKLKEN THINKING

apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 [分享]深度工作 你需要更多的思考时间 Django项目重构小结 工作七年小结: 学习,生活及其他 [分享]bash日常: bash-utils 极客时间推广海报 2017总结: 予时光以意义 k8s APIServer源码: api注册详细细节 k8s APIServer源码: api注册主体流程 k8s APIServer源码: 服务启动 k8s APIServer源码: go-restful框架 重构 - 读书笔记(Python示例) 写给新人的沟通建议 vim 杂谈 - 关于快速编辑 vim 杂谈 - 关于移动 读书笔记-重构: 章11 处理概括关系 读书笔记-重构: 章10 简化函数调用 读书笔记-重构: 章9 简化表达式 读书笔记-重构: 章8 重新组织数据 读书笔记-重构: 章7 在对象之间搬移特性 读书笔记-重构: 章6 重新组织函数 Python 代码规范小结 [分享]关于vim ElasticSearch集群部署文档 Logstash+ElasticSearch处理mysql慢查询日志 [分享]关于代码调试DE那些事 Logstash+ElasticSearch+Kibana- 实现相对通用的数据收集分析 ELK维护的一些点(二) [分享]Python源码剖析-数据结构 一些Centos Python生产环境的部署命令 摘录<<6个月学会任何一种外语>> ELK 维护的一些点 也许是一个新的开始 一些vim的个性化配置 读书笔记-调试九法 这段时间的一些想法 Python 源码阅读 - 垃圾回收机制 我为什么要写博客 APUE笔记-第一章 UNIX基础知识 Python源码阅读-闭包的实现 Python源码阅读-内存管理机制(二) Python源码阅读-内存管理机制(一) Python-基础-数据结构小结 '活动'设计的一些trick 一些简单的Python测试题 我的tmux配置及说明【k-tmux】 Review and Restart 工作四周年小结 vim插件: surround & repeat[成对符号编辑] vim插件: gundo[时光机] vim插件: expand-region[区域选中] vim插件: quickrun[快速执行] vim插件: trailing-whitespace[行尾空格处理] vim插件: closetag[成对标签补全] vim插件: ctrlp[文件搜索] vim插件: airline[状态栏增强] vim插件: theme[主题] vim插件: tagbar[大纲式导航] vim插件: nerdcommenter[快速注释] vim插件: rainbow_parentheses[括号高亮] vim插件: syntastic[语法检查] vim插件: delimitmate[符号自动补全] vim插件: matchit[成对标签跳转] vim插件: easy-align[快速对齐] vim插件: multiple-cursors[多光标操作] vim插件: vim-signature[快速标记跳转] vim插件: easymotion[快速跳转] vim插件: vundle[管理插件] Elasticsearch几个问题的解决 分享一份 Vim 简介PPT k-vim 更新9.0版本 关于知识管理工具的思考
数据结构&算法实践—【排序|交换排序】奇偶排序
2012-05-17 · via Posts on WKLKEN THINKING

排序»交换排序»奇偶排序

List:

0.概念+伪代码+示例分析
1.奇偶排序实现
2.Question
3.后续扩展
  1. start

基本概念:

维基百科http://zh.wikipedia.org/wiki/%E5%A5%87%E5%81%B6%E6%8E%92%E5%BA%8F

伪代码:

function odd_even(A: list[1..n]){
    whie has_swap:
        for i from 0 to n-1 && i%2==0 && i+1<=n-1{
            if(A[i] > A[i+1])
                swap(A[i], A[i+1])
        }
        for j from 1 to n-1 && j%2==1 && j+1<=n-1{
            if(A[j] > A[j+1])
                swap(A[j], A[j+1])
        }
}

奇偶排序

类似于冒泡排序,冒泡排序并行化的版本()

简单但效率不高

每一轮存在两次排序:奇数排序(下标奇数与其邻居比较&交换),偶数排序(下标偶数与其邻居比较交换)

直到不存在数据交换

示例:

[50, 10, 30, 20, 40, 60]

第一轮 偶数排序

cmp 50 10
change [10, 50, 30, 20, 40, 60]
cmp 30 20
change [10, 50, 20, 30, 40, 60]
cmp 40 60
odd range [10, 50, 20, 30, 40, 60]

第一轮 奇数排序

cmp 50 20
change [10, 20, 50, 30, 40, 60]
cmp 30 40
even range [10, 20, 50, 30, 40, 60]

第二轮 偶数排序

cmp 10 20
cmp 50 30
change [10, 20, 30, 50, 40, 60]
cmp 40 60
odd range [10, 20, 30, 50, 40, 60]

第二轮 奇数排序

cmp 20 30
cmp 50 40
change [10, 20, 30, 40, 50, 60]
even range [10, 20, 30, 40, 50, 60]

第三轮 不存在数据交换

cmp 10 20
cmp 30 40
cmp 50 60
odd range [10, 20, 30, 40, 50, 60]
cmp 20 30
cmp 40 50
even range [10, 20, 30, 40, 50, 60] #到这里,无数据交换,结束
[10, 20, 30, 40, 50, 60]
  1. start

    :::python def oddeven_sort(l): odd_range = range(0,len(l)-1,2) even_range = range(1,len(l)-1,2) sign = 1 while sign: sign = 0 for i in odd_range: if l[i] > l[i+1]: l[i], l[i+1] = l[i+1],l[i] sign = 1 for j in even_range: if l[j] > l[j+1]: l[j], l[j+1] = l[j+1], l[j] sign = 1 print l

  2. start

A.奇偶排序概念,过程描述?

B. 时间复杂度?空间复杂度?是否是稳定排序?

  1. start

后续扩展——Batcher奇偶归并排序(后面实现)