排序——选择类

这里写图片描述


1.简单选择排序

这里写图片描述
这里写图片描述

/**
 * 简单选择排序
 * @param r
 * @param low
 * @param high
 */
public void selectSort(Object[] r, int low, int high) {
    for(int k=low; k<high-1; k++){//做n-1趟选取
        int min = k;
        for(int i=min+1; i<=high; i++){//选择关键字最小的元素
            if(strategy.compare(r[i], r[min]) <0 ){
                min = i;
            }
        }
        if(k != min){
            Object temp = r[k];//关键字最小的元素与元素r[k]交换
            r[k] = r[min];
            r[min] = temp;
        }
    }
}

这里写图片描述


2.树形选择排序

这里写图片描述
这里写图片描述
这里写图片描述


3.堆排序

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

/**
 * 调整r[low,high]使之成为大顶堆
 * @param r  是除r[low]之外,其余元素均满足堆的定义
 * @param low
 * @param high
 */
private void heapAjust(Object[] r,int low,int high){
    Object temp = r[low];
    for(int j=2*low; j<=high; j=j*2){//沿关键值较大的元素向下进行筛选
        //j指向关键值较大的元素
        if(j<high && strategy.compare(r[j], r[j+1]) <0){
            j++;
        }
        //若temp比其孩子都大,则插入到low所指位置
        if(strategy.compare(temp, r[j]) >= 0){
            break;
        }
        r[low] = r[j];
        low = j;//向下筛选
    }
    r[low] = temp;
}
/**
 * 堆排序
 * @param r
 */
public void heapSort(Object[] r){
    int n = r.length-1;
    for(int i=n/2; i>=1; i--){//初始化建堆
        heapAjust(r, i, n);
    }
    for(int i=n; i>1; i--){//不断输出堆顶元素并调整r[1..i-1]为新堆
        Object temp = r[1];//交换堆顶与堆底元素
        r[1] = r[i];
        r[i] = temp;
        heapAjust(r, 1, i-1);//调整
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值