【发布时间】:2015-10-18 05:38:47
【问题描述】:
#include <iostream>
using namespace std;
void moveToKthSmallest(int a[], int size, int k);
int main() {
int theArray[17] = {42, 5, 412, 56, 14, 98, 488, 4882, 24, 4, 9, 67, 9424, 2, 1, 3, 5};
int num;
cout << "Move to the kth smallest number in the array (size of 17): " << endl;
cin >> num;
moveToKthSmallest(theArray, 17, num);
return 0;
}
void moveToKthSmallest(int a[], int size, int k) {
int pivot = size / 2;
int pivotValue = a[pivot];
int index1 = 0, index2 = 0;
int s1[size], s2[size]; //not sure about this
for (int i = 0; i < size; i++) {
if (a[i] < pivotValue) {
s1[index1] = a[i];
index1++;
}
else {
s2[index2] = a[i];
index2++;
}
}
int s1Size = index1; //problem?
int s2Size = index2; //problem?
if (s1Size == k - 1) {
cout << pivotValue;
}
else if (s1Size > (k - 1)) {
moveToKthSmallest(s1, s1Size, k);
}
else if (s1Size < (k - 1)) {
moveToKthSmallest(s2, s2Size, k - (s1Size - 1));
}
}
我要求用户输入一个数字(大于或等于 0 或小于或等于 17),程序应输出已生成数组中第 k 个最小的数字。
以上是我的尝试,但每当我运行它时它都会崩溃。我认为这与函数中数组 s1 和 s2 的声明以及可能从 index1 和 index2 生成的大小值有关。我尝试过使用向量和动态数组,但我的编译器中不断收到错误消息,例如“错误:无法将 'std::vector**' 转换为 'int*' for argument '1' to 'void moveToKthSmallest” .. . 老实说,我不太清楚这意味着什么。
我在这里遗漏了一些明显的东西吗?
【问题讨论】: