快速排序

快速排序跟归并排序是一样的,采用的是分治的思想。其实现是每次将数组分为两个部分,一部分小于某个值,一部分大于某个值。当这样一直拆分下去,最后归并就得到一个排序好的数组。

下面来看一下C++实现,partition函数是将一个数组的一部分,拆分为两半的过程,选取了数组这部分的最后一个元素,然后将小于这个元素的移到这部分靠前部分,大于这个值的移到靠后部分,最后有一个这个值的位置,这样就确定了这个值的位置,并将数组的这部分拆成小于这个值的部分和大于这个值的部分。

int partition(int *array, int start, int end){
    int mid_value = array[end];
    int pos = start;
    int temp;

    for(int i = start; i <= end; i++){
        if(array[i] < mid_value){
            int temp = array[pos];
            array[pos] = array[i];
            array[i] = temp;
            pos++;
        }
    }

    temp = array[pos];
    array[pos] = mid_value;
    array[end] = temp;

    return pos;
}

然后我们基于上面的进行递归调用,直到最后只剩一个元素的情况下就是自动满足这种查分条件的基本情况。

void quick_range(int *array, int start, int end){
    if(start < end){
        int mid = partition(array, start, end);
        quick_range(array, start , mid - 1);
        quick_range(array, mid + 1 , end);
    }
}

最后测试的main函数

int main(){
    const int ARRAY_LENGTH = 8;
    int array[ARRAY_LENGTH] = {5, 2, 4, 7, 1, 3, 2, 6};

    quick_sort(array, ARRAY_LENGTH);

    std::cout << "[ ";
    for(int i = 0; i < ARRAY_LENGTH; i++){
        std::cout << array[i] << " ";
    }
    std::cout << "]" << std::endl;

    return 1;
}

运行结果:

[ 1 2 2 3 4 5 6 7 ]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值