快速排序

本文详细介绍了快速排序算法的原理和两种不同的实现方式。第一种实现通过选取基准值,从两端遍历并交换元素来达到排序效果。第二种实现则是通过填坑策略,找到合适的位置填充元素。两种方法都通过递归调用来对子数组进行排序,最终完成整个数组的排序。

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

快速排序
快排思路:
每次排序我们先选定我们要确定位置的值(一般定为数组开头数),然后从头尾两个方向遍历数组,尾部数应该比这个数大,大的话则递减j;头部的数应该比这个数小,小的话递加i;
这次遍历j停在比这个数小的数上面,i停在比这个数大的数上面,那么最后我们交换这两个数。循环进行遍历,直到i>=j停止。最后停的位置就是我们目标数的正确位置,最后再交换这个数和对应位置,完成此次排序。
代码如下:

    vector<int> MySort(vector<int>& arr) {
        quickSort(arr, 0, arr.size() - 1);
        return arr;// write code here
    }
    void quickSort(vector<int>& arr, int start, int end) {
        if (start >= end) return;
        int target = arr[start];
        int i = start, j = end;
        while (i < j) {
            while (j > i && arr[j] > target) --j;
            while (j > i && arr[i] <= target) ++i;//这里因为i开始停在我们目标值位置
            swap(arr[i], arr[j]);
        }
        swap(arr[i], arr[start]);
        cout << target
        print(arr);
        quickSort(arr, start, i - 1);
        quickSort(arr, i + 1, end);
    }
};
#include<vector>
#include<iostream>
using namespace std;


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    void print(vector<int> arr) {
        for (const int a : arr) {
            cout << a;
        }
    }
    vector<int> MySort(vector<int>& arr) {
        quickSort(arr, 0, arr.size() - 1);
        return arr;// write code here
    }
    void quickSort(vector<int>& arr, int start, int end) {
        if (start >= end) return;
        int target = arr[start];
        int i = start, j = end;
        while (i < j) {
            while (j > i && arr[j] > target) --j;
            while (j > i && arr[i] <= target) ++i;//这里因为i开始停在我们目标值位置
            swap(arr[i], arr[j]);
        }
        swap(arr[i], arr[start]);
        cout << target
        print(arr);
        quickSort(arr, start, i - 1);
        quickSort(arr, i + 1, end);
    }
};
int main() {
    vector<int> inputv = { 884688278, 387052570, 77481420, 537616843, 659978110, 215386675, 604354651, 64838842, 830623614, 544526209, 292446044, 570872277, 946770900, 411203381, 445747969, 480363996, 31693639, 303753633, 261627544, 884642435, 978672815, 427529125, 111935818, 109686701, 714012242, 691252458, 230964510, 340316511, 917959651, 544069623, 193715454, 631219735, 219297819, 151485185, 986263711, 805374069, 915272981, 493886311, 970466103, 819959858, 733048764, 393354006, 631784130, 70309112, 513023688, 17092337, 698504118, 937296273, 54807658, 353487181, 82447697, 177571868, 830140516, 536343860, 453463919, 998857732, 280992325, 13701823, 728999048, 764532283, 693597252, 433183457, 157540946, 427514727, 768122842, 782703840, 965184299, 586696306, 256184773, 984427390, 695760794, 738644784, 784607555, 433518449, 440403918, 281397572, 546931356, 995773975, 738026287, 861262547, 119093579, 521612397, 306242389, 84356804, 42607214, 462370265, 294497342, 241316335, 158982405, 970050582, 740856884, 784337461, 885254231, 633020080, 641532230, 421701576, 298738196, 918973856, 472147510, 169670404 };
    Solution* s = new Solution();
    for (const int i : inputv) { cout << i << ' '; }
    cout << endl;
    s->MySort(inputv);
    for (const int i : inputv) { cout << i<<' '; }
}

第二种实现:
相当于把交换改成填坑,i初始在目标处,j停的位置的值填坑i,然后i再++,i停的位置的值填坑j。最后循环结束,把目标值填到最后i停的位置。(每次填完坑指针递进)

void quick_sort(vector<int> s, int begin, int end)
{
    if (begin < end)
    {
        int i = begin, j = end, target = s[begin];
        while (i < j)
        {
            while(i < j && s[j] >= target) // 从右向左找第一个小于x的数
                j--;  
            if(i < j) 
                s[i++] = s[j];
            
            while(i < j && s[i] < target) // 从左向右找第一个大于等于x的数
                i++;  
            if(i < j) 
                s[j--] = s[i];
        }
        s[i] = target;
        quick_sort(s, l, i - 1); // 递归调用 
        quick_sort(s, i + 1, r);
    }
内容概要:本文档详细介绍了基于MATLAB实现的多头长短期记忆网络(MH-LSTM)结合Transformer编码器进行多变量时间序列预测的项目实例。项目旨在通过融合MH-LSTM对时序动态的细致学习和Transformer对全局依赖的捕捉,显著提升多变量时间序列预测的精度和稳定性。文档涵盖了从项目背景、目标意义、挑战与解决方案、模型架构及代码示例,到具体的应用领域、部署与应用、未来改进方向等方面的全面内容。项目不仅展示了技术实现细节,还提供了从数据预处理、模型构建与训练到性能评估的全流程指导。 适合人群:具备一定编程基础,特别是熟悉MATLAB和深度学习基础知识的研发人员、数据科学家以及从事时间序列预测研究的专业人士。 使用场景及目标:①深入理解MH-LSTM与Transformer结合的多变量时间序列预测模型原理;②掌握MATLAB环境下复杂神经网络的搭建、训练及优化技巧;③应用于金融风险管理、智能电网负荷预测、气象预报、交通流量预测、工业设备健康监测、医疗数据分析、供应链需求预测等多个实际场景,以提高预测精度和决策质量。 阅读建议:此资源不仅适用于希望深入了解多变量时间序列预测技术的读者,也适合希望通过MATLAB实现复杂深度学习模型的开发者。建议读者在学习过程中结合提供的代码示例进行实践操作,并关注模型训练中的关键步骤和超参数调优策略,以便更好地应用于实际项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值