奇偶排序Odd-even sort
2016-01-21 11:52
549 查看
奇偶排序Odd-even sort
参看 维基百科的定义
又一个比较性质的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序
![](http://img.blog.csdn.net/20160121115024333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
举例,待排数组[6 2 4 1 5 9]
第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比
[6 2 4 1 5 9]
交换后变成
[2 6 1 4 5 9]
第二次比较偶数列,即6和1比,5和5比
[2 6 1 4 5 9]
交换后变成
[2 1 6 4 5 9]
第三趟又是奇数列,选择的是2,6,5分别与它们的邻居列比较
[2 1 6 4 5 9]
交换后
[1 2 4 6 5 9]
第四趟偶数列
[1 2 4 6 5 9]
一次交换
[1 2 4 5 6 9]
参看 维基百科的定义
又一个比较性质的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序
举例,待排数组[6 2 4 1 5 9]
第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比
[6 2 4 1 5 9]
交换后变成
[2 6 1 4 5 9]
第二次比较偶数列,即6和1比,5和5比
[2 6 1 4 5 9]
交换后变成
[2 1 6 4 5 9]
第三趟又是奇数列,选择的是2,6,5分别与它们的邻居列比较
[2 1 6 4 5 9]
交换后
[1 2 4 6 5 9]
第四趟偶数列
[1 2 4 6 5 9]
一次交换
[1 2 4 5 6 9]
using System; using System.Collections.Generic; namespace Com.Colobu.Algorithm.Exchange { /// <summary> /// <b>奇偶排序</b>的思路是在数组中重复两趟扫描。 /// 第一趟扫描选择所有的数据项对,a[j]和a[j+1],j是奇数(j=1, 3, 5……)。 /// 如果它们的关键字的值次序颠倒,就交换它们。 /// 第二趟扫描对所有的偶数数据项进行同样的操作(j=2, 4,6……)。 /// 重复进行这样两趟的排序直到数组全部有序。 /// /// 平均时间复杂度:O(n^2) /// Stability:Yes /// </summary> public class OddEvenSortAlgorithm { public static void OddEvenSort<T>(IList<T> szArray) where T : IComparable { bool sorted = false; while (!sorted) { sorted = true; // odd-even for (int i = 1; i < szArray.Count - 1; i += 2) { if (szArray[i].CompareTo(szArray[i + 1]) > 0) { Swap(szArray, i, i + 1); sorted = false; } } // even-odd for (int j = 0; j < szArray.Count - 1; j += 2) { if (szArray[j].CompareTo(szArray[j + 1]) > 0) { Swap(szArray, j, j + 1); sorted = false; } } } } private static void Swap<T>(IList<T> szArray, int i, int j) { T tmp = szArray[i]; szArray[i] = szArray[j]; szArray[j] = tmp; } } }
相关文章推荐
- js console.log打印对像与数组用法详解
- Linux系统中dig命令用法完全罗列
- 7、React中的refs的使用
- Java类与对象===Java变量的作用域
- ZIGBee组网流程
- 64位Ubuntu12.04下安装arm-linux-gdb,以及解决no termcap library found的方法
- dedecms获取当前文章所在栏目URL
- 能够返回运行结果的system函数加强版本号
- (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
- JSONObject put,accumulate,element的区别
- Web前端攻防
- droWtsaLfohtgneL.58
- 如何用sql实现两个字段相加?
- Android Studio中JNI -- 2 -- 编写c文件
- 在CentOS 7上利用systemctl添加自定义系统服务
- python:浅析python 中__name__ = '__main__' 的作用
- mac os与windows的体验区别(用户角度)//不定时更新
- 获取客户端的真实Ip地址
- 精密单点定位(PPP)数据处理反演潮汐
- 慕尼黑市政府迁移到 Linux 的进程或将取得全面胜利