数据结构与算法-选择排序&堆排序

2018-03-30  本文已影响0人  星空下奔跑

简单选择排序

排序思想:每次选出最小值与对应位置记录交换,直至序列有序。

void SelectSort(Sqlist &L){
    for(int i=1;i<L.length;i++){
        min=selmin(L,i);
        L.r[i]<->L.r[min];
    }//for
}

Java实现:

private void selectSort(int[] array) {
        int len=array.length;
        for (int i = 0; i < len; i++) {
            int target=array[i];
            int index=i;
            for (int j = i + 1; j < len; j++) {
                if (target > array[j]) {
                    target=array[j];
                    index=j;
                }
            }
            array[index]=array[i];
            array[i]=target;
        }
        println(array);
    }

堆排序

排序思想:将待排序列看成一个完全二叉树,完全二叉树所有非终端结点均不大于其左右孩子结点的值,反复进行便得到有序的序列。

//小顶堆
void HeapAdjust(Sqlist &L,int n){
    for(int i=2*n;i<L.length;i*=2){
        if(i<L.length&&LT(L.r[i],L.r[i/2]){
            L.r[i]<->L.r[i/2];
        }//if
    }//for
}

void HeapSort(Sqlist &L){
    for(int i=L.length/2;i<L.length;--i){
        HeapAdust(L,i);
}

Java实现:

private void adjust(int[] a,int end) {
        for (int i = end; i > 0; i--) {
            if (a[i] > a[i / 2]) {
                int tmp=a[i];
                a[i] = a[i / 2];
                a[i/2]=tmp;
            }
        }
    }
    private void heapSort(int[] array){

        if (array != null && array.length > 0) {
            adjust(array,array.length-1);
        }

        for (int i = array.length - 1; i > 0; i--) {
            int tmp=array[i];
            array[i] = array[0];
            array[0]=tmp;

            adjust(array,i-1);
        }

        println(testArray);
    }
上一篇 下一篇

猜你喜欢

热点阅读