快速排序

原理思想
• 分治思想:快速排序遵循分治策略,将一个大问题(对整个数组排序)分解成多个小问题(对划分后的子数组排序)。先选择数组中的一个元素作为“基准”元素,比如常选第一个或最后一个元素。
• 划分操作:通过双指针法(左右指针),从数组两端开始扫描,将小于基准的元素移到左边,大于基准的元素移到右边,最终确定基准元素的正确位置,使数组以基准为界分为左右两部分,左边元素都小于等于它,右边元素都大于等于它。
代码实现要点
• 划分函数:
    传入待排序数组、起始索引与结束索引,函数内通过指针移动交换元素来完成划分,返回基准元素最终位置索引,便于后续递归调用。
    需注意指针移动条件及元素交换逻辑,避免越界等错误。
• 递归调用:
    基于划分后基准元素的位置,分别对左右子数组进行递归排序,递归的边界条件通常是子数组长度大于1(即起始索引小于结束索引)。
    合理设置递归终止情况,防止无限递归。
代码:

#include
#include
using namespace std;

// 交换两个元素的函数
void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

// 划分函数,选择一个基准元素,将数组划分为两部分
int partition(vector& arr, int low, int high) {
    int pivot = arr[high];  // 通常选择最后一个元素作为基准
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(arr[i], arr[j]);
        }
    }
    swap(arr[i + 1], arr[high]);
    return i + 1;
}

// 快速排序递归函数
void quickSort(vector&amp; arr, int low, int high) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high);
        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

// 打印数组元素的函数,方便查看排序结果
void printArray(const vector&amp; arr) {
    for (int num : arr) {
        cout << num << &quot; &quot;;
    }
    cout << endl;
}

int main() {
    vector arr = { 12, 11, 13, 5, 6 };
    int n = arr.size();
    quickSort(arr, 0, n - 1);
    cout << &quot;排序后的数组: &quot;;
    printArray(arr);
    return 0;
}
全部评论

相关推荐

12-13 18:57
已编辑
合肥工业大学 测试工程师
几乎没有看到英雄游戏的游测二面面经,刚面完趁着有记忆粗略总结一下一、自我介绍二、为什么会想到干游戏测试?三、你平时玩游戏时会不会特别关注bug四、像你提到你玩王者荣耀,小乔的扇子飞出去会再飞回来,你会怎么测试?五、(面试官主动提醒)玩家在扇子飞出去到飞回来有一段时间可以进行其他操作,你会补充哪些测试点?六、给一个多人组队且需要门票的副本,玩家在规定时间内击杀100个怪物则副本完成,结算奖励,你会怎么测试?(我主要考虑多人组队、副本开启条件、完成条件和安全测试,现在想来感觉奖励计算和网络环境也可以展开说)七、你发现一个bug,结果找开发A开发A说不归他管去找开发B,开发B说去找策划,互相踢皮球你会怎么办?(肌肉记忆套公式说先记录下bug留证,再找测试主管协商,最后三方协商,感觉回答地偏离了题目主旨,应该是考察实际工作过程中遇到踢皮球情况该怎么办)八、玩家发来邮件觉得某个英雄太超标了你会怎么办?九、接上,你会怎么测试一个英雄是否超标?十、接上,你跟策划反馈后策划不觉得超标你怎么办?(什么狗屁问题,狗策划要是什么时候能意识到自己设计的英雄超标了那还是狗策划吗)十一、拷打实习项目(你遇到什么困难、负责什么工作、怎么分配任务的、怎么分配时间的)十二、有没有在实习或过往中遇到特别难相处的人,是怎么处理的?十三、你提到你学习了一些引擎相关的知识,主要有哪些?(引擎模块、内置查询指令和测试工具可帮助快速定位游戏内常见bug)十四、蓝图什么的了解吗?(不了解)十三、你的职业规划?反问环节不知道问啥,就随便问了问总结:总体下来感觉体验还是非常不错的,尤其是中间一些问题会停下来等我思考或给出一些提示面试内容压根没问八股(白准备了),基本围绕实用游戏场景考察设计测试用例的逻辑与能力,以及应对实际工作情景的职场素养(我的天呐主管大人)潘神工作室现在正在做的二重螺旋我还是非常感兴趣的,许愿通过更新&nbsp;12.12感谢信
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务