LeetCode排序数组Swift 冒泡排序、快速排序 面试
给你一个整数数组 nums
,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1] 输出:[1,2,3,5]
冒泡排序
class Solution { func sortArray(_ nums: [Int]) -> [Int] { guard nums.count > 1 else { return nums } var nums = nums //一共需要 nums.count - 1 趟 for i in 0 ..< nums.count - 1 { //一趟冒泡一个最小的数 一趟需要比较的次数 for j in 0 ..< nums.count - 1 - i { if nums[j] > nums[j + 1] { (nums[j + 1],nums[j]) = (nums[j],nums[j + 1]) } } } return nums } }
快速排序
快速排序作为分治代表,通常实现由三步
1、数据中选择一个元素作为”基准”(pivot),通常选取最后一个元素;
2、分区(partition) 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。分区操作结束后,基准元素所处的位置就是最终排序后它的位置。
3、对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
class Solution { //快速排序 func sortArray(_ nums: [Int]) -> [Int] { var arr = nums quickSort(&arr, 0, arr.count - 1) return arr } private func quickSort(_ nums: inout [Int], _ left: Int, _ right: Int) { if left >= right { return } var i = left; var j = right; let key = nums[i]; while i<j { while i<j && nums[j] >= key{ j -= 1; } nums[i] = nums[j]; while i<j && nums[i] <= key{ i += 1; } nums[j] = nums[i] } nums[i] = key; self.quickSort(&nums, left, i-1) self.quickSort(&nums, i+1, right) } }
不知道为啥,LeetCode 超出时间限制,我猜测现状是,一个已经排好序的很大的数组,这种情况下排序,是快排最差的情况,时间复杂度是 O(n²) ,有知道怎么解决的网友吗
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
分类:
LeetCode学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性