请问我这是快速排序吗

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

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]&&iwhile(nums[j]>=nums[right]&&iif(iint 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

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

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

这里的花括号也是多余

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7513039
  • 除此之外, 这篇博客: 【LeetCode】三个数的最大乘积中的 实际上其中有重复情况,在借鉴前几答案之后。我发现其实只需要分别找出数组中最大的三个数和最小的两个数,找出最大的三个数的乘积,最小两个数和最大数的乘积。将两者比较即可。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读: