【发布时间】:2012-03-14 07:17:44
【问题描述】:
当我运行以下代码进行快速选择时
#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
我有运行时错误,我认为这是与索引有关的问题,但找不到哪里,请帮助我
【问题讨论】:
-
我猜你的意思是“快速排序”?
-
没有没有快速选择,但我猜到这段代码的主要问题
-
提示一下,在为快速排序选择枢轴值时,最好选择三的中位数。这将使算法很可能选择一个好的枢轴值。如果您选择一个随机元素,并且该元素恰好是最低或最高值,则算法将非常慢。如果我发现代码有什么问题,我会回复你
-
我不知道使用代码,如何找到三个的中位数