寻找数组中的第i大的元素

  • Post author:
  • Post category:其他
#include<iostream>

#include<cmath>

using namespace std;

void fileArray(int array[], int len){

    for(int i=0;i<len;i++){

        array[i]=rand()%100;

    }

}

void printArray(int array[], int len){

    for(int i=0;i<len;i++){

        cout<<array[i]<<” “;

        if((i+1)%10 == 0){

            cout<<endl;

        }

    }

}

int partition(int array[], int low, int high){

    int key=array[high];

    int i=low-1;

    for(int j=low;j<=high;j++){

        if(array[j]<key){

            i++;

            int temp=array[i];

            array[i]=array[j];

            array[j]=temp;

        }

    }

    int temp=array[i+1];

    array[i+1]=array[high];

    array[high]=temp;

    return (i+1);

}

void quickSort(int array[], int low, int high){

    if(low<high){

        int mid=partition(array,low,high);

        quickSort(array,low,mid-1);

        quickSort(array,mid+1,high);

    }

}

int findIthElement(int array[], int low, int high, int i){

    if(low == high){

        return array[low];

    }

    int mid=partition(array,low,high);

    int num=mid-low+1;

    if(i == num){

        return array[mid];

    }else if(i<num){

        return findIthElement(array,low,mid-1,i);

    }else{

        return findIthElement(array,mid+1,high,i-num);

    }

}

int main(){

    const int size=1000;

    int array[size];

    fileArray(array,size);

    printArray(array,size);

    int i=3;

    int ithElement=findIthElement(array,0,size-1,i);

    quickSort(array,0,size-1);

    printArray(array,size);

    cout<<“The “<<i<<“th Element is:”<<ithElement<<endl;

    return 0;

}


版权声明:本文为zhangqiang423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。