题目

        给定一个整数数组a,同时给定它的大小N和要找的K(1 <= K <= N),请根据快速排序的思路,找出数组中第K大的数(保证答案存在)。比如:数组a为[50, 23, 66, 18, 72],数组大小N为5,K为3,则第K大的数为50。

C++面试宝典第9题:找出第K大元素-LMLPHP

解析

        这道题主要考察应聘者对于快速排序的理解,以及实际运用的能力。快速排序是一种高效的排序算法,采用分治策略进行排序。以下是快速排序的具体步骤:

        选择轴心(pivot):首先,从待排序的数组中选择一个元素作为轴心。选择轴心的方式有多种,可以选择第一个元素、最后一个元素、中间元素,或者随机选择一个元素。

        划分(Partition):重新排列数组,使得所有比轴心小的元素都排在轴心的左边,所有比轴心大的元素都排在轴心的右边。在这个过程中,轴心的位置也确定了。

        递归排序子数组:递归地对轴心左边和右边的两个子数组进行快速排序。递归的终止条件是:子数组的长度为1或0,此时子数组已经有序。

        根据上面的分析,我们可以写出快速排序的示例代码。

int Partition(int* pnNumber, int 
12-25 09:46