w3504 2023-04-08 19:30 采纳率: 0%
浏览 17

请问我这是快速排序吗

请问我这个是快速排序吗?

class Solution {
public:
void fsort(vector<int>& nums, int left, int right)
{
    if(left>=right)
    return;
    int i=left;int j=right;
    while(1)
    {
        while(nums[i]<=nums[right]&&i<j)
        i++;
        while(nums[j]>=nums[right]&&i<j)
        j--;
        if(i<j)
        {
            int t=nums[i];
            nums[i]=nums[j];
            nums[j]=t;
        }
        else
        {
            {
                int g=nums[i];
                nums[i]=nums[right];
                nums[right]=g;
            }
            break;
        }
    }
    fsort(nums,left,i-1);
    fsort(nums,i+1,right);
}
    vector<int> sortArray(vector<int>& nums) {
        fsort(nums,0,nums.size()-1);
        return nums;
    }
};

为什么和官方的比慢了这么多。我只能通过11/20,后面就超时了,官方17/20
下面是官方的

class Solution {
    int partition(vector<int>& nums, int l, int r) {
        int pivot = nums[r];
        int i = l - 1;
        for (int j = l; j <= r - 1; ++j) {
            if (nums[j] <= pivot) {
                i = i + 1;
                swap(nums[i], nums[j]);
            }
        }
        swap(nums[i + 1], nums[r]);
        return i + 1;
    }
    int randomized_partition(vector<int>& nums, int l, int r) {
        int i = rand() % (r - l + 1) + l; // 随机选一个作为我们的主元
        swap(nums[r], nums[i]);
        return partition(nums, l, r);
    }
    void randomized_quicksort(vector<int>& nums, int l, int r) {
        if (l < r) {
            int pos = randomized_partition(nums, l, r);
            randomized_quicksort(nums, l, pos - 1);
            randomized_quicksort(nums, pos + 1, r);
        }
    }
public:
    vector<int> sortArray(vector<int>& nums) {
        srand((unsigned)time(NULL));
        randomized_quicksort(nums, 0, (int)nums.size() - 1);
        return nums;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/sort-an-array/solutions/178305/pai-xu-shu-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目是leetcode912.排序数组

img

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-04-08 22:09
    关注

    你的思路大体上来说也是快速排序,但是存在一些不优化
    比如说你每次只是循环交换一个数字,然后又开始从头循环了。

                {
                    int g=nums[i];
                    nums[i]=nums[right];
                    nums[right]=g;
                }
    
    

    这里的花括号也是多余

    评论

报告相同问题?

问题事件

  • 创建了问题 4月8日

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!