您的位置:首页 > 其它

双向冒泡与奇偶冒泡

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()方法。确保它可以在不同数据量的排序中运行,还需要算出两趟扫描的次数。奇 偶排序实际上在多处理器环境中很有用,处理器可以分别同时处理每一个奇数对,然后又同时 处理偶数对。因为奇数对是彼此独立的,每一对都可以用不同的处理器比较和交换。这样可以非常快速地排序。

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡