原地快速排序

原地快速排序的步骤如下:

    1. 取序列中的任意值作为一个基准值;

    2. 将该基准值与序列的头或者尾进行交换;

    3. 将基准值之外的其他值与基准值进行比较,小于基准值的交换到序列前面,大于基准值的交换到序列后面;

    4. 将基准值交换到序列的分界线处;

    5. 将序列按基准值分为两部分分别进行快速排序;

 

 

代码如下:

private void quickSortInPlace(int[] s, int startIndex, int endIndex){
    if(s == null || s.length < 2){
        return;
    }

    if(startIndex >= endIndex || endIndex >= s.length || startIndex < 0){
        return;
    }

    int pivot = s[startIndex];
    int pivotIndex = startIndex;
    swap(s, startIndex, endIndex);
    for(int i=startIndex; i<endIndex; i++){
        if(s[i] < pivot){
            if(i != pivotIndex){
                swap(s, i, pivotIndex);
            } 
            pivotIndex++;
        }else if(s[i] > pivot){
            continue;
        }
    }
  
    swap(s, pivotIndex, endIndex);
    
    if(pivotIndex > startIndex+1){
        quickSortInPlace(s, startIndex, pivotIndex-1);
    }
    
    if(pivotIndex < endIndex -1){
        quickSortInPlace(s, pivotIndex+1, endIndex);
    }
}

//将数组s中i和j的位置进行调换
private void swap(int[] s, int i, int j){
    int temp = s[i];
    s[i] = s[j];
    s[j] = temp;
}

    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值