快速选择算法
quickselect algorithm
当我为快速选择运行以下代码时
#include <cstdlib>
#include <iostream>
using namespace std;
const int n = 15;
int b[100];
int btotal=0;
int c[100];
int ctotal=0;
void read(int a[],int size){
for (int i=1; i<=15; i++) cin >> a[i];
}
int quickselect(int a[], int k)
{
int r = 1 + rand()%(n-1);
int pivot = a[r];
for (int i=1; i<=n; i++) {
if (a[i] < pivot) {
b[i] = a[i];
++btotal;
}
if (a[i] > pivot) {
c[i] = a[i];
++ctotal;
}
}
if (k <= btotal) quickselect(b,k);
if (k > (n-ctotal)) return quickselect(c, k - (n-ctotal));
return pivot;
}
int main(int argc, char *argv[])
{
int a[n];
cout <<" enter contents of array " << endl;
read(a, n);
quickselect(a, 6);
//system("PAUSE");
//return EXIT_SUCCESS;
return 0;
}
1 4 2 3 5 7 6 9 8 10 13 12 11 15 14
我有运行时错误,我认为这是与索引有关的问题,但找不到哪里,请帮助我
您的写入超出了数组a
的范围。
int a[15]
将为15个整数分配空间,索引从a[0]
到a[14]
。您当前正在读取/写入偏移[1]
到(包括)[15]
,这是错误的。
所需的最小更改
void
read (int a[],int size)
{
for (int i=0; i < 15; i++) // CHANGE TO
...
}
...
int
quickselect(int a[],int k)
{
...
for (int i=0; i < n; i++) { // CHANGE TO
...
}
相关文章:
- C++选择排序算法中的逻辑错误
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 快速实现 PRIM 算法
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 快速排序函数在快速排序算法中如何工作?
- 如何从文件夹树中快速选择随机文件?
- 最小 kth 用于快速选择算法
- 我的Dijkstra算法没有选择短路径
- 为什么我的中位数快速选择算法segfault
- 快速选择算法因元素重复而失败
- 遗传算法的选择机制
- 快速选择算法
- 我的快速选择算法未返回正确的值
- 快速选择算法
- 在DOM中快速选择元素
- 计数在有效算法中选择两个数的方法
- c++中的快速选择实现,无需额外的内存分配
- 不能理解快速选择算法