首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速选择算法

快速选择算法
EN

Stack Overflow用户
提问于 2015-01-07 07:07:44
回答 1查看 2K关注 0票数 0

我试图在数组上实现快速选择算法,该算法具有随机生成的数字。现在,在用代码编写算法之后,它不会从最低到最高对数组进行排序,我也无法找到kth最小元素。我会感谢你的帮助。谢谢。

代码语言:javascript
复制
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

void printArray(int *myArray, int n){
    for(int i = 0; i < n; i++){
       cout << myArray[i] << " ";
}
}

int Partition(int *myArray, int startingIndex, int endingIndex){
int pivot = myArray[endingIndex];
int partitionIndex = startingIndex;
for(int i = startingIndex; i<endingIndex; i++){
    if(myArray[i]<= pivot){
        swap(myArray[i],myArray[partitionIndex]);
        partitionIndex++;
    }
}
swap(myArray[partitionIndex],myArray[endingIndex]);
return partitionIndex;
} 

int QuickSelect(int *myArray, int startingIndex, int endingIndex, int KthElement){
/*if(startingIndex < endingIndex){
    int partitionIndex = Partition(myArray, startingIndex,endingIndex);
    QuickSelect(myArray,startingIndex,partitionIndex-1);
    QuickSelect(myArray,partitionIndex+1,endingIndex);
}*/1
if (startingIndex < endingIndex){
    int partitionIndex = Partition(myArray, startingIndex, endingIndex);
    if(KthElement == partitionIndex)
        return KthElement;
    if(KthElement < partitionIndex)
        QuickSelect(myArray, startingIndex, partitionIndex - 1, KthElement);
    else
        QuickSelect(myArray, partitionIndex + 1, endingIndex, KthElement);
}
}
int main(){

int numOfElements;
int KthElement;
srand(time(NULL));
cout<<"Enter The Amount Of Numbers You Wish To Use: ";
cin >> numOfElements;
int myArray[numOfElements];

cout << "Array Before Sorting: ";
for(int i = 0; i< numOfElements; i++){
    myArray[i] = rand() %10;
}

printArray(myArray, numOfElements);

cout << endl;
cout << endl;

cout <<"Enter The Index Of The Kth Element You Wish To Retrieve: ";
cin >> KthElement;

QuickSelect(myArray, 0,numOfElements,KthElement);
cout << "Array After Sorting: ";
printArray(myArray, numOfElements);
cout << endl;

cout <<"The " <<KthElement<<" Smallest Element Is: " <<   QuickSelect(myArray,0,numOfElements,KthElement);

}
EN

回答 1

Stack Overflow用户

发布于 2015-01-07 07:38:23

对于作为5的numOfElements,数组从0扩展到4。您的endingIndex假设它是数组的最后一个索引。

修正:

代码语言:javascript
复制
QuickSelect(myArray, 0,numOfElements-1,KthElement);

代码出现问题:

  • 中的绑定数组位置之外的程序访问 int枢轴= myArrayendingIndex;
  • 检查一下k<1k>(num_of_elements)
  • 检查num_of_elements =1的代码。
  • 检查数组的k意味着什么,即对于k=1arr[0]应该返回,而不是arr[1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27814143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档