首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

以一个枢纽值2分一个数组

2012-09-08 
以一个枢纽值二分一个数组划分算法由两个指针开始,分别指向数组的两头。在左边的指针向右移动,右边的指针向

以一个枢纽值二分一个数组

划分算法由两个指针开始,分别指向数组的两头。在左边的指针向右移动,右边的指针向左移动。左边的指针leftPtr初始化为第一个数据项,右边的指针rightPtr初始化为数组的最后一项。算法如下:

?

import java.util.Random;public class Partition {    private long[] theArr;    private int nElems;    public Partition(int max) {        theArr = new long[max];        nElems = 0;    }    public void insert(long value) {        theArr[nElems++] = value;    }    public int size() {        return nElems;    }    public void display() {        System.out.print("A = ");        for (int j = 0; j < nElems; j++) {            System.out.print(theArr[j] + " ");        }        System.out.println();    }    public int partitionIt(int left, int right, long pivot) {        int leftPtr = left - 1;        int rightPtr = right + 1;        while (true) {            // keep moving to right until current value is larger than pivot            while (leftPtr < right && theArr[++leftPtr] < pivot) {                //            }            // keep moving to left until current value is smaller than pivot            while (rightPtr > left && theArr[--rightPtr] > pivot) {                //            }            // if left pointer meet the right pointer, break            if (leftPtr >= rightPtr) {                break;            } else {                swap(leftPtr, rightPtr);            }        }        // return pivot position        return leftPtr;    }    public void swap(int dex1, int dex2) {        long temp = theArr[dex1];        theArr[dex1] = theArr[dex2];        theArr[dex2] = temp;    }}

?

end.

热点排行