434
社区成员
发帖
与我相关
我的任务
分享
int partition(int a[],int left,int right)
{
int i=a[left];基准点
while循环
使得左半部所有数比基准点小,右半部比基准点大。
return 基准点下标;
}
int find(int a[],int left,int right,int k)
{
int p=partition(a,left,right);
如果p等于 k-1(即第k的元素的下标),则直接打印
若大于,将范围缩小至左半边find(a,left,p-1,k);
小于则将范围则缩小至右半端find(a,p+1,right,k);
return 0;
}
递归关系式:T(n) = T(n/2) + O(n)
当一次排序就找出时,算法的时间复杂度为O(n)。
如果每次选择的基准元素是最大或最小值,此时的时间复杂度为O(n²)
分治法是一种好方法,通过将复杂问题分解成若干个子问题,分别解决子问题,通过子问题的解以得到原问题的解。分治法,不仅仅是编程中更在生活中,大事化小小事化了的思想在任何问题面前都是杀招,step by step,成功的人生来自于每一天,分治编程问题,分治人生问题,最后解决。