利用递归和循环实现快速排序

本文详细介绍了快速排序算法的两种实现方式:递归与循环,并通过C++代码实例展示了这两种方法的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <queue>
using namespace std;
typedef std::pair<int ,int> queue_data;
queue<queue_data> my_queue;
void swap(int &a,int&b){
    int temp = a;
    a = b;
    b = temp;
}

int partionArray(int * array,int begin,int end){
    int key = array[end];
    int i = begin-1;
    for (int j = i+1;j<end;j++){
        if(array[j]<=key){
            i=i+1;
            swap(array[i],array[j]);
        }
    }
    swap(array[i+1],array[end]);
    return i+1;
}
void quickSort(int *array,int begin ,int end){
    if(begin<end){
        int k =partionArray(array ,begin,end);
        quickSort(array,begin,k-1);
        quickSort(array,k+1,end);
    }
}
void quickSortUseLoop(int *array,int begin ,int end){
    queue_data begin_end= make_pair(begin,end);
    my_queue.push(begin_end);
    while (!my_queue.empty()){
        queue_data begin_end = my_queue.front();
        my_queue.pop();
        int k = partionArray(array,begin_end.first,begin_end.second);
        if(begin_end.first<k-1) {
            my_queue.push(make_pair(begin_end.first, k - 1));
        }
        if(k+1<begin_end.second){
            my_queue.push(make_pair(k+1,begin_end.second));
        }
    }


}
int main(){
    int array_new[]={-1,3,2,6,7,5,9};
    int array[]={-1,3,2,6,7,5,9};
    int length = sizeof(array)/ sizeof(int);
    quickSort(array,0,length-1);
    std::cout << "------------ recursion function ----------------"<<std::endl;
    for(auto i:array){
        std::cout << " "<<i<<std::endl;
    }
    std::cout << "------------ loop function ----------------"<<std::endl;

    int length_new = sizeof(array_new)/ sizeof(int);
    quickSortUseLoop(array_new,0,length_new-1);
    for(auto i:array_new){
        std::cout << " "<<i<<std::endl;
    }
}

循环与递归方式的快排思想一致,递归时,先将数组分成两个部分,之后分别再对这两个部分递归排序。for循环就是将分组的前半部和后半部的起始和结束位置记录下来,再进行分组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值