1.要找到第k小的数,只需要将所有的元素从小到大进行排序,找到排序后第k位置上的数即可。在排序算法中,假设采取归并排序的方式,就可以通过分治思想来达到排序的目的。首先先定义left和right两个指针,分别指向要排序的数的数组的第一个元素的位置和最后一个元素加1的位置。然后定义指针mid,来将整个数组从中间分成大致相等的两段,即将整个问题分治成两个子问题。mid指针和mid+1处的指针作为新的右、左指针来继续参与对子问题的分治,直到left指针=right指针,即左右指针指向同一个元素时返回到上一个子问题,将元素进行大小比较后放入一个新的数组中存储,然后再返回上一个子问题,以此类推。这一套流程的实现通常采取递归的方式来进行实现。
2.该算法在只有一个元素时存在最好时间复杂度,即为T(n)=O(1);在通常情况下,由于将一个规模为n的问题分解成了两个规模为n/2的子问题,因此有2T(n/2),在合并到新数组的步骤中,所需的时间为O(n)。因此,对它们运用主定理进行求解,结果有n的$\log_2 2$,即为n,与O(n)相等,因此还要乘上log n。综上所述,时间复杂度最坏为O(nlogn)。
3.分治法通过将一个复杂且庞大的问题分解为若干个更小的、结构相同的子问题,大大降低了问题复杂度和求解难度。由于每个子问题是相互独立的,因此可以进行并行计算,极大地缩短程序的整体运行时间。使用分治法还能够提高算法效率,这主要体现在使用了分治法的算法相比于通常算法来说时间复杂度较低。同时由于其具有递归结构,时间复杂度能够通过主定理进行快速求解。