奇偶排序
来源:互联网 发布:苏州 矩阵光电 新三板 编辑:程序博客网 时间:2024/05/17 08:53
有一种简单排序算法是奇偶排序。
思路是在数组中重复两趟扫描。第一趟扫描选择所有的数据项对,a[j]和a[j+1],j是奇数。如果他们的关键字的值次序颠倒就交换他们。第二趟扫描对所有的偶数数据项进行同样的操作,j是偶数。重复进行这样的两趟的排序直到数组全部有序。
Java实现:
public class ArrayOddEven { private long[] a; private int nElems; public ArrayOddEven(int max) { a = new long[max]; nElems = 0; } public void insert(long value) { a[nElems] = value; nElems++; } public void display() { for(int j=0; j<nElems; j++) { System.out.print(a[j] + " "); } System.out.println(""); } public void oddEvenSort() { int num = 0; while(!isOrder()){ for(int j=1; j<nElems-1; j+=2) { if(a[j]>a[j+1]) { swap(j, j+1); } } for(int j=0; j<nElems-1; j+=2) { if(a[j]>a[j+1]) { swap(j, j+1); } } num++; } System.out.println("Sort times: " + num); } private boolean isOrder() { boolean b = true; for(int j=0; j<nElems-1; j++) { if(a[j+1]<a[j]) { b = false; } } return b; } private void swap(int in, int i) { long temp; temp = a[in]; a[in] = a[i]; a[i] = temp; }}
测试:
public class OddEvenSortApp { public static void main(String[] args) { int maxSize = 100; ArrayOddEven arr; arr = new ArrayOddEven(maxSize); arr.insert(77); arr.insert(99); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(44); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); arr.oddEvenSort(); arr.display(); }}
测试结果:
77 99 55 22 88 44 11 0 66 33
Sort times: 4
0 11 22 33 44 55 66 77 88 99
奇偶排序实际上在多处理器环境中很有用,处理器可以分别同时处理每一个奇数时,然后又同时处理偶数对。因为奇数对是彼此独立的,每一对都可以用不同的处理器比较和交换,这样可以非常快速的排序。
1 0
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 奇偶排序
- 【基础排序】奇偶排序
- NDK 开发记录
- 手撸ListView弹性下拉刷新和上拉加载更多
- ES6简介
- redis
- JavaSE_按行读取文件
- 奇偶排序
- 免费混合虚拟化OVM数据中心解决方案
- Android自定义控件基础
- hdu ---2031做题笔记(c++)
- 百度地图release.apk 地图不显示
- C++静态库与动态库
- js中数组的操作
- ES6篇let和conts命令
- 小萌谈Art(7)——让RobotArt打败小怪兽还我小萌猴