算法设计与分析第二章实验报告

软工2301余忠玹 2024-10-19 20:18:01

1、找第k小的数

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;
}

 

2、算法的时间复杂度

递归关系式:T(n) = T(n/2) + O(n)

2.1、最好时间复杂度

当一次排序就找出时,算法的时间复杂度为O(n)。

 

2.2、最坏时间复杂度

如果每次选择的基准元素是最大或最小值,此时的时间复杂度为O(n²)

 

 

3.对分治法的体会和思考

分治法是一种好方法,通过将复杂问题分解成若干个子问题,分别解决子问题,通过子问题的解以得到原问题的解。分治法,不仅仅是编程中更在生活中,大事化小小事化了的思想在任何问题面前都是杀招,step by step,成功的人生来自于每一天,分治编程问题,分治人生问题,最后解决。

...全文
199 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧