双向冒泡与奇偶冒泡
2016-02-25 17:16
204 查看
3.1 bubbleSort.java程序(清单3.1)和BubbleSort专题applet中,in索引变量都是从左到 右移动的,直到找到最大数据项并把它移动到右边的out变量外。修改bubbleSort()方法, 使它成为双向移动的。这样,in索引先像以前一样,将最大的数据项从左移到右,当它到 达out变量位置时,它掉头并把最小的数据项从右移到左。需要两个外部索引变量,一个在 右边(以前的out变量),另一个在左边。
3.4 还有一种简单排序算法是奇偶排序。它的思路是在数组中重复两趟扫描。第一趟扫描选择所有 1的数据项对,a[j]和a[j+1],j是奇数(j=1,3,5,……)。如果它们的关键字的值次序颠倒,就交 1换它们。第二趟扫描对所有的偶数数据项进行同样的操作(j=2,4,6,……)。重复进行这样两趟的排序直到数组全部有序。用oddEvenSort()方法替换bubbleSort.java程序(清单3.1)中的 bubbleSort()方法。确保它可以在不同数据量的排序中运行,还需要算出两趟扫描的次数。奇 偶排序实际上在多处理器环境中很有用,处理器可以分别同时处理每一个奇数对,然后又同时 处理偶数对。因为奇数对是彼此独立的,每一对都可以用不同的处理器比较和交换。这样可以非常快速地排序。
3.4 还有一种简单排序算法是奇偶排序。它的思路是在数组中重复两趟扫描。第一趟扫描选择所有 1的数据项对,a[j]和a[j+1],j是奇数(j=1,3,5,……)。如果它们的关键字的值次序颠倒,就交 1换它们。第二趟扫描对所有的偶数数据项进行同样的操作(j=2,4,6,……)。重复进行这样两趟的排序直到数组全部有序。用oddEvenSort()方法替换bubbleSort.java程序(清单3.1)中的 bubbleSort()方法。确保它可以在不同数据量的排序中运行,还需要算出两趟扫描的次数。奇 偶排序实际上在多处理器环境中很有用,处理器可以分别同时处理每一个奇数对,然后又同时 处理偶数对。因为奇数对是彼此独立的,每一对都可以用不同的处理器比较和交换。这样可以非常快速地排序。
public class ArrayBub { private long[] a; private int nElems; public ArrayBub(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 bubbleSort(){ int out,in; for(out = nElems-1;out>0;out--) for(in=0;in<out;in++){ if(a[in]>a[in+1]) swap(in,in+1); } } private void swap(int one,int two){ long temp = a[one]; a[one]=a[two]; a[two]=temp; } //====================================================== //编程作业3.1 public void bubbleSort1(){ int leftout = 0,rightout = nElems-1,in; for(;leftout<rightout;leftout++,rightout--){ for(in =leftout;in< rightout;in++){ if(a[in]>a[in+1]){ swap(in,in+1); } } for(in =rightout;in> leftout;in--){ if(a[in]<a[in-1]){ swap(in,in-1); } } } } //========================================================= //编程作业3.4 public void oddEvenSort(){ boolean change = true; while(change){ change = false; for(int i = 0;i < nElems-1;i+=2){ if(a[i]>a[i+1]){ swap(i,i+1); change =true; } } for(int i = 1;i < nElems-1;i+=2){ if(a[i]>a[i+1]){ swap(i,i+1); change =true; } } } } }
public class BubbleSortApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int maxSize = 100; ArrayBub arr; arr = new ArrayBub(maxSize); arr.insert(77); arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); arr.bubbleSort(); arr.display(); arr = new ArrayBub(maxSize); arr.insert(4); arr.insert(3); arr.insert(2); arr.insert(1); arr.display(); arr.bubbleSort1(); arr.display(); ArrayBub arr1 = new ArrayBub(maxSize); arr1.insert(8); arr1.insert(7); arr1.insert(6); arr1.insert(5); arr1.display(); arr1.oddEvenSort();//奇偶排序 arr1.display(); } }
相关文章推荐
- 修改正确的asp冒泡排序
- javascript事件冒泡实例分析
- JQuery中DOM事件冒泡实例分析
- javascript 不让鼠标事件触发
- js冒泡、捕获事件及阻止冒泡方法详细总结
- 基于mouseout和mouseover等类似事件的冒泡问题解决方法
- Python 冒泡,选择,插入排序使用实例
- 什么是事件冒泡?如何用jquery/js阻止事件冒泡?阻止冒泡有什么作用?小生来抛个砖。
- 递归方式实现BubbleSort 冒泡排序
- 冒泡法 python VS C
- JS事件冒泡
- 数据结构排序算法之冒泡
- 简单的冒泡排序
- 理解DOM中的事件流
- 交换排序之 【冒泡排序】
- 数组
- javascript事件冒泡、捕获及阻止方法终极解答
- 冒泡排序与快速排序
- 手写冒泡(不用第三个变量)
- 黑马程序员—-C语言入门十重奏之七相离