【发布时间】:2021-09-05 17:45:57
【问题描述】:
我正在努力解决这个挑战:
使用快速排序算法返回数组的第 Kth 个最小元素
我没有得到以下输入的正确输出:
int arr[] = {3, 2, 1};
int k = 2;
我不明白我的错误在哪里。
我的 C++ 代码:
#include<bits/stdc++.h>
int partion(int arr[], int l, int r)
{
int x = arr[r];
int i = l - 1;
int j;
for (j = l; j < r; j++)
{
if (arr[j] < x)
{
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[r], arr[i + 1]);
return i + 1;
}
int quick(int arr[], int l, int r, int k)
{
if (k > 0 && k <= r - l + 1)
{
int m = partion(arr, l, r);
return m == k - 1 ? arr[m] : k - 1 < m ? quick(arr, l, m - 1, k)
: quick(arr, m + 1, r, k - m + l - 1);
}
return INT_MAX;
}
所以当我运行这段代码时:
int arr[] = {3, 2, 1};
int k = 2;
std::cout << quick(arr, 0, sizeof(arr) / sizeof(int), k);
我得到的输出是 INT_MAX,而预期是 2。
【问题讨论】:
-
您预计会发生什么,会发生什么?
-
试过调试了吗?你的发现是什么?
-
我尝试调试,但我得到了一些巨大的数字而不是正确的输出
-
我希望得到第 k 个最小的元素,但我得到了一些巨大的数字,因为它在所有情况下都返回 INT_MAX
标签: c++ arrays algorithm data-structures quicksort