第一版,使用库函数

`class Solution {public:vector<int> sortArray(vector<int>& nums) {sort(nums.begin(),nums.end());return nums;}
};`

借此复习一下快排和堆排序

class Solution {void maxHeapify(vector<int>& nums, int i, int len) {for (; (i << 1) + 1 <= len;) {int lson = (i << 1) + 1;int rson = (i << 1) + 2;int large;if (lson <= len && nums[lson] > nums[i]) {large = lson;} else {large = i;}if (rson <= len && nums[rson] > nums[large]) {large = rson;}if (large != i) {swap(nums[i], nums[large]);i = large;} else {break;}}}void buildMaxHeap(vector<int>& nums, int len) {for (int i = len / 2; i >= 0; --i) {maxHeapify(nums, i, len);}}void heapSort(vector<int>& nums) {int len = (int)nums.size() - 1;buildMaxHeap(nums, len);for (int i = len; i >= 1; --i) {//为啥要交换?//虽然说比较大的元素需要上浮,但是上浮前不应该先判断下吗?swap(nums[i], nums[0]);len -= 1;maxHeapify(nums, 0, len);}}
public:vector<int> sortArray(vector<int>& nums) {heapSort(nums);return nums;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/sort-an-array/solution/pai-xu-shu-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

官方的答案没有看懂,下面的这个题解倒是看懂了

class Solution {public int[] sortArray(int[] nums) {int len = nums.length;int[] a = new int[len + 1];for (int i = 0; i < nums.length; ++i) {a[i+1] = nums[i];}          //下沉建堆//从中间开始,每个节点都下沉了一遍,已经在底部的节点没有必要再下沉了。for (int i = len/2; i >= 1; --i) {sink(a,i,len);}int k = len;//排序while (k > 1) {swap(a,1,k--);//由于是大顶堆,删除的时候将堆顶放在堆底sink(a,1,k);//删除之后依次下沉每一个堆顶}for (int i = 1; i < len+1; ++i) {nums[i-1] = a[i];}return nums;}public void sink (int[] nums, int k,int end) {//下沉while (2 * k <= end) {int j = 2 * k;//找出子节点中最大或最小的那个if (j + 1 <= end && nums[j + 1] > nums[j]) {j++;//这里找出的是最大的那个,并且下沉建堆是从当前的节点到根节点的下沉建堆}if (nums[j] > nums[k]) {swap(nums, j, k);//交换} else {break;}k = j;}}public void swap (int nums[], int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}作者:chefyuan
链接:https://leetcode-cn.com/problems/sort-an-array/solution/dong-hua-mo-ni-yi-ge-po-dui-pai-wo-gao-l-i6mt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

自己用C++写了一遍,开心,学会了堆排序

class Solution {public:
//堆排序
void swap(vector<int>& nums,int i,int j){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;
}
//下沉第k个节点
void sink(vector<int>& nums,int k,int end){while(k*2 <= end){int j = k*2;if(j + 1 <= end && nums[j+1] > nums[j]){j++;}if(nums[k] < nums[j]){swap(nums,k,j);}else {break;}k = j;//新的index用来查看是否需要继续下沉}
}vector<int> sortArray(vector<int>& nums) {int len = nums.size();vector<int> a(len+1);copy(nums.begin(),nums.end(),a.begin()+1);//下沉建堆for(int i = len/2;i >= 1;i--){sink(a,i,len);}int k = len;while(k > 1){swap(a,1,k--);sink(a,1,k);}nums.assign(a.begin()+1, a.end());return nums;}
};

2022-4-9 Leetcode 912.排序数组相关推荐

  1. Leetcode 912.排序数组(Sort an Array)

    Leetcode 912.排序数组 1 题目描述(Leetcode题目链接)   给定一个整数数组 nums,将该数组升序排列. 输入:[5,2,3,1] 输出:[1,2,3,5] 输入:[5,1,1 ...

  2. Leetcode.912 排序数组

    题目链接 Leetcode.912 排序数组 mid 题目描述 给你一个整数数组 n u m s nums nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出: ...

  3. LeetCode 912. 排序数组(Java)

    912. 排序数组 你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 提示: 1 <= nums.length &l ...

  4. LeetCode 912. 排序数组【模板题】

    912. 排序数组 [快排] class Solution {// 快速排序 7:32 13void quickSort(int[] nums, int l, int r){if(l >= r) ...

  5. LeetCode[912]排序数组

    难度:Medium 题目: 给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1, ...

  6. LeetCode 912. 排序数组(10种排序)

    文章目录 1. 题目 2. 解题 2.1 插入排序 2.2 冒泡排序 2.3 选择排序 2.4 希尔排序 2.5 归并排序 2.6 快速排序 2.7 堆排序 2.8 计数排序 2.9 桶排序 2.10 ...

  7. [leetcode] 912.排序数组

    给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0 ...

  8. LeetCode 912. 排序数组-快排(C++)

    本题是华为一面手撕题目. 快排的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程 ...

  9. LeetCode删除排序数组中的重复项(Java实现)

    原题: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...

最新文章

  1. 第2篇 C#数据类型-值类型与引用类型
  2. mySql 注入攻击
  3. python list 取重复次数
  4. 线程的退出 java_(转)Java结束线程的三种方法
  5. suse linux10 关闭防火墙,Suse10 关闭防火墙
  6. verilog对YCrCb转换灰度设计及仿真
  7. JS中var与function
  8. 8个成语接龙首尾相连_小学经典成语200个,已按场景分类好,孩子写作不再词穷...
  9. BTP-2118 玩 GTA5
  10. 算法设计与分析:最短路径问题(哈密顿回路+最短路)小学期实践
  11. Android调用第三方app(Scheme隐式以及显示调用)
  12. win7安装java环境(详细步骤)
  13. mac下解决无法往U盘内复制文件的问题
  14. rest-assured实战
  15. 用了这么多年百度搜索, 今天才发现加上双引号搜索结果这么准
  16. w3wp ash oracle,Oracle session简介
  17. 计算机邀请函制作教案,计算机邀请函制作要点
  18. 学习QT之图形视图实例#-飞舞的蝴蝶
  19. 【英语语法入门】 第12讲 代词:指示代词和不定代词
  20. MATLAB运用——计算三维物体的质心(水花号)

热门文章

  1. ToDoList-简单有效的个人任务管理器
  2. pyinstaller将py文件打包成EXE文件(保姆级教程)
  3. chrome书签导出
  4. Mybatis返回树形结构
  5. app架构图,330页PDF,10万字的知识点总结,全网独家首发!
  6. GIS-国内常见的地理坐标系
  7. LC谐振电路应用方法
  8. 软件测试分析——质量模型分析法
  9. 国内企业搭建网站为何不用WordPress?
  10. 智慧医疗以小见大 | 联想智慧医疗的青葱岁月