java排序算法(持续更新)

来源:互联网 发布:大数据人才需求 编辑:程序博客网 时间:2024/05/17 07:42

插入排序(O(n2)):

// 插入排序public static void insertionSort(int[] number){        int j;        for(int p=1;p<number.length;p++){            int tmp=number[p];            for(j=p;j>0&&(tmp-number[j-1])<0;j--){            number[j]=number[j-1];            }            number[j]=tmp;            }}

希尔排序(O(n2)):略优于插入排序

// 希尔排序public static void shellSort(int[] data){    int j;    for(int gap=data.length/2;gap>0;gap=gap/2){        for(int i=gap;i<data.length;i++){            int tmp=data[i];            for(j=i;j>=gap&&(tmp-data[j-gap])<0;j-=gap){              data[j]=data[j-gap];        }        data[j]=tmp;    }}}

堆排序(NlogN):

// 堆排序    //节点与根节点交换    private static void swapReferences(int[] data, int first, int second) {        int tmp = data[first];        data[first] = data[second];        data[second] = tmp;    }//得到当前结点的左孩子    private static int leftChild(int i) {        return i * 2 + 1;    }//排序    public static void heapSort(int[] data) {        for (int i = data.length / 2 - 1; i >= 0; i--) {            percDown(data, i, data.length);        }        for (int i = data.length - 1; i > 0; i--) {            swapReferences(data, 0, i);            percDown(data, 0, i);        }    }//当父节点小于子节点时,子节点与父节点交换    private static void percDown(int[] data, int i, int n){        int child;        int tmp;        for (tmp = data[i]; leftChild(i) < n; i = child) {            child = leftChild(i);            if (child != n - 1 && (data[child] - data[child + 1]) < 0) {                child++;            }            if((tmp-data[child])<0){data[i]=data[child];        }            else                break;    }        data[i]=tmp;}
原创粉丝点击