zoukankan      html  css  js  c++  java
  • LeetCode排序数组Swift

    给你一个整数数组 nums,请你将该数组升序排列。

    示例 1:

    输入:nums = [5,2,3,1]
    输出:[1,2,3,5]

    快速排序作为分治代表,通常实现由三步

    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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    C#/Net代码精简优化技巧(二)【转】
    IsSpecialName特性及其他问题【转】
    &、|与&&、||的比较
    序列化后存储Cookie
    序列化反序列化操作
    C#/Net代码精简优化技巧(一)【转】
    .Net 中的序列化与反序列化【转】
    c#对象序列化(二进制序列化)BinaryFormatter【转】
    POJ 2828 Buy Tickets(单点更新) 详细题解和思路
    Color the ball HDU 1556 (非线段树做法)
  • 原文地址:https://www.cnblogs.com/huangzs/p/14892097.html
Copyright © 2011-2022 走看看