二分法、快速排序、堆排序 java实现

来源:互联网 发布:中国新歌声网络战队 编辑:程序博客网 时间:2024/06/05 20:51

1.二分法

private int middleSort(int[] arry) {        int high = arry.length;        int low = 0;        while (low <= high) {            int mid = (low + high) / 2;            if (arry[mid] == STANTARD) {                return mid;            }            if (arry[mid] > STANTARD)                high = mid - 1;            if (arry[mid] < STANTARD)                low = mid + 1;        }        return -1;    }

2. 快排

private int getMiddle(int[] a, int low, int high) {        int tmp = a[low];        while(low < high) {            while(low < high && a[high] >= tmp)                high--;            if(low < high) a[low] = a[high];            while(low < high && a[low] <= tmp)                low++;            if(low < high) a[high] = a[low];        }        a[low] = tmp;        return low;    }private void quickSort(int[] a, int low, int high) {        if(low < high) {            int middle = getMiddle(a, low, high);            quickSort(a, middle + 1, high);            quickSort(a, low, middle - 1);        }    }


3. 堆排序

private void sortHeap(int[] a) {        buildHeap(a, a.length);        for(int i = (a.length - 1); i >= 0; i--) {            int tmp = a[i];            a[i] = a[0];            a[0] = tmp;            changeHeap(a, 0, i);        }    }    private void buildHeap(int[] a, int size) {        for(int i = size/2; i >= 0; i--) {            changeHeap(a, i, size);        }    }    private void changeHeap(int[] a, int i, int size) {        int leftChild = 2*i + 1;        int rightChild = 2*i + 2;        int max = i;        if((leftChild < size) && a[leftChild] > a[max])            max = leftChild;        if((rightChild < size) && a[rightChild] > a[max])            max = rightChild;        if (max != i) {            int tmp = a[i];            a[i] = a[max];            a[max] = tmp;            changeHeap(a, max, size);        }    }



0 0
原创粉丝点击