快速排序qsort算法实例

本文深入介绍了快速排序算法,包括其核心思想——分治法,并通过C++实现提供了详细的代码示例。此外,还展示了如何使用递归来实现快速排序。

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

快速排序算法是一项非常有用而且高效的排序算法,运算复杂度为O(nlogn)量级,这个算法我是刚开始在学数据结构的时候上机做的一个程序,现在
算法:分治法,主要通过递归来实现

#include"iostream"
#include"math.h"
using namespace std;

int AdjustArray(int s[], int l, int r){
    int i = l, j = r, X = s[i];
    while (i < j){
        //find a number that is less than X
        while (i < j && s[j] >= X)//从右向左找
            j--;
        if (i < j){
            s[i] = s[j];
            i++;
        }
        while (i < j && s[i] <= X){
            i++;
        }
        if (i < j){
            s[j] = s[i];
            j--;
        }
    }
    //将基准值放入最后一个空
    s[i] = X;
    return i;
}
void myquick_sort(int s[], int l, int r){
    if (l < r)
    {
        int i = AdjustArray(s, l, r);
        myquick_sort(s, l, i - 1);
        myquick_sort(s, i + 1, r);
    }
}

/*如果用一个函数的话,可以将两个函数放在一起*/
/*
void qsort_add(int s[], int l, int r){
    if (l < r)
    {
        int i = l, j = r, X = s[i];
        while (i < j){
            //find a number that is less than X
            while (i < j && s[j] >= X)//从右向左找
                j--;
            if (i < j){
                s[i] = s[j];
                i++;
            }
            while (i < j && s[i] <= X){
                i++;
            }
            if (i < j){
                s[j] = s[i];
                j--;
            }
        }
        //将基准值放入最后一个空
        s[i] = X;
        myquick_sort(s, l, i - 1);
        myquick_sort(s, i + 1, r);
    }
}
*/
//交换两个值的算法,如果用C语言写的话,记得要用指针引用,否则只能传值,函数调用结束后,原本的数组顺序还是没变。
void exchange(int a[]){
    int temp;
    for (int i = 0; i < 10 / 2; i++)
    {
        temp = a[i];
        a[i] = a[9 - i];
        a[9 - i] = temp;
    }
}
int main()
{
    int length = 10;
    int *a = new int[10];
    for (int i = 0; i < length; i++)
    {
        *(a + i) = int(rand()%17);
        cout << a[i] << ' ';
    }
    cout << endl<<"original series is\n";
    for (int i = 0; i < length; i++)
        cout << a[i] << ' ';
    cout << endl;
    exchange(a);
    cout << endl << "new series is\n";
    for (int i = 0; i < length; i++)
        cout << a[i] << ' ';
    cout << endl;
    qsort_plus(a, 0, 9);
    for (int i = 0; i < length; i++)
        cout << a[i] << ' ';
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值