找到整数数组中第m大的数

来源:互联网 发布:淘宝怎么设置微淘 编辑:程序博客网 时间:2024/06/07 10:04

思路:

排序过程中找到,而不是全部排成有序再找。排序算法使用快排。

 

 

int QSort(int arr[], int n, int m)

{

    int i = 0;

    int j = n-1;

 

    if (n<1)

    {

        return 0;

    }

 

    int pivot = arr[i];

 

    while (i<j)

    {

        while(i<j && pivot<=arr[j])

        {

            j--;

        }

 

        if(i<j)// found a smaller(than pivot) number

        {

            arr[i++] = arr[j];

        }

 

        while(i<j && arr[i]<=pivot)

        {

            i++;

        }

 

        if(i<j)

        {

            arr[j--] = arr[i];

        }

    }

 

    arr[i] = pivot;

 

    if (i+1 == m)

    {

        return arr[i];

    }

    else if (i+1 > m)

    {

        return QSort(arr, i, m);

    }

    else

    {

        QSort(&arr[i+1], n-i-1, m-i-1);

    }

}

 

int _tmain(int argc, _TCHAR* argv[])

{

   

    int arr[] = {8,12,14,1,3,5,7,16,19};

 

    for(int i = 0;i<9;i++)

    {

        int nth = QSort(arr, 9, i+1);

        cout<<i+1<<"th:"<<nth<<endl;

}

}

 

 

 

http://www.dreamincode.net/forums/topic/61496-find-n-max-elements-in-unsorted-array/

 

原创粉丝点击