您的位置:首页 > 汽车 > 时评 > 推广收款码平台有哪些_国外免费logo网站_百度网站名称_宁德seo培训

推广收款码平台有哪些_国外免费logo网站_百度网站名称_宁德seo培训

2024/12/23 1:57:53 来源:https://blog.csdn.net/hlyd520/article/details/144561706  浏览:    关键词:推广收款码平台有哪些_国外免费logo网站_百度网站名称_宁德seo培训
推广收款码平台有哪些_国外免费logo网站_百度网站名称_宁德seo培训

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

912. 排序数组


题目描述:

e509f18102a6d4c931e4adf1ebd47cc7


解法

归并排序

12b6d2c675692a52a133036c7a011bac

快排有点像前序遍历,归并有点像后序遍历。


C++ 算法代码:

class Solution 
{vector<int> tmp; // 用于临时存储合并后的数组public:vector<int> sortArray(vector<int>& nums) {tmp.resize(nums.size()); // 初始化临时数组的大小与 nums 相同mergeSort(nums, 0, nums.size() - 1); // 调用归并排序函数,从数组的起始位置到末尾位置return nums; // 返回排序后的数组}void mergeSort(vector<int>& nums, int left, int right){if(left >= right) return; // 基本情况:如果左边界大于或等于右边界,说明当前区间只有一个元素或为空,无需排序// 1. 选择中间点划分区间int mid = (left + right) >> 1; // 这里两个加起来不会溢出,使用位运算 (left + right) >> 1 代替 (left + right) / 2 以提高效率// [left, mid] [mid + 1, right]为划分后的两个子区间// 2. 递归地对左右两个子区间进行排序mergeSort(nums, left, mid);mergeSort(nums, mid + 1, right);// 3. 合并两个有序的子数组// 初始化指针// cur1指向第一个子数组的当前元素// cur2指向第二个子数组的当前元素// i指向临时数组的当前位置int cur1 = left, cur2 = mid + 1, i = 0;// 当两个子数组都还有元素时,比较并复制较小的元素到临时数组while(cur1 <= mid && cur2 <= right)tmp[i++] = nums[cur1] <= nums[cur2] ? nums[cur1++] : nums[cur2++]; // 如果第一个子数组的当前元素小于或等于第二个子数组的当前元素// 处理没有遍历完的数组while(cur1 <= mid) tmp[i++] = nums[cur1++]; // 处理第一个子数组中剩余的元素(如果有)while(cur2 <= right) tmp[i++] = nums[cur2++]; // 处理第二个子数组中剩余的元素(如果有)// 4. 将临时数组中的合并结果复制回原数组的对应位置for(int i = left; i <= right; i++)nums[i] = tmp[i - left];//tmp[i - left] 是因为 tmp 是从索引 0 开始存储合并后的结果,而 nums 的索引是从 left 开始。//因此,tmp 的第 0 个元素对应 nums 的第 left 个元素,tmp 的第 1 个元素对应 nums 的第 left + 1 个元素,依此类推}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com