手写代码模块(Java实现)——排序

手写代码模块(Java实现)——排序

代码呈现为函数封装形式, 接口统一为数组int [] array

1.冒泡排序

public static void BubbleSort(int [] a){
    int i, j;
    int n = a.length;
    for(i=0; i<n; i++){//n次排序。
        for(j=1; j<n-i; j++){
            if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换
                //交换a[j-1]和a[j]
                int temp;
                temp = a[j-1];
                a[j-1] = a[j];
                a[j]=temp;
            }
        }
    }
}// end

2.快速排序

    public static void sort(int a[], int low, int hight) {
        int i, j, index;
        if (low > hight) {
            return;
        }
        i = low;
        j = hight;
        index = a[i]; // 用子表的第一个记录做基准
        while (i < j) { // 从表的两端交替向中间扫描
            while (i < j && a[j] >= index)
                j--;
            if (i < j)
                a[i++] = a[j];// 用比基准小的记录替换低位记录
            while (i < j && a[i] < index)
                i++;
            if (i < j) // 用比基准大的记录替换高位记录
                a[j--] = a[i];
        }
        a[i] = index;// 将基准数值替换回 a[i]
        sort(a, low, i - 1); // 对低子表进行递归排序
        sort(a, i + 1, hight); // 对高子表进行递归排序

    }

    public static void QuickSort(int a[]) {
        sort(a, 0, a.length - 1);
    }

3.堆排序

 /**
     * 构建大顶堆作为例子
     */
    public static void adjustHeap(int[] a, int i, int len) {
        int temp, j;
        temp = a[i];
        for (j = 2*i+1; j < len; j = 2*j+1)  {// 选一个较大的儿子来跟爸爸比大小做交换,利用完全二叉树序号的关系(起始位为0),递归性质的去调整子树
            if (j < len && a[j] < a[j + 1])
                ++j; // 较大的儿子
            if (temp >= a[j])
                break; // not swap
            a[i] = a[j];// swap
            i = j;
        }
        a[i] = temp;// 填补空缺的位置
    }

    public static void heapSort(int[] a) {
        int i;
        for (i = a.length / 2 - 1; i >= 0; i--) {// 构建一个大顶堆
            adjustHeap(a, i, a.length - 1);
        }
        for (i = a.length - 1; i >= 0; i--) {// 将堆顶记录和当前未经排序子序列的最后一个记录交换
            int temp = a[0];
            a[0] = a[i];
            a[i] = temp;
            adjustHeap(a, 0, i - 1);// 将a中前i-1个记录重新调整为大顶堆
        }
    }

猜你喜欢

转载自blog.csdn.net/u014744127/article/details/80187759
今日推荐