分治法——线性时间选择问题

本文探讨了如何使用分治法解决线性时间选择问题,即在给定的n个元素集合中,如何在O(n)的时间复杂度内找到第k小的元素。介绍了随机快速排序策略和利用中位数来实现线性时间的选择方法。
摘要由CSDN通过智能技术生成

问题

  • 线性时间选择问题:给定线性序集中n个元素和一个整数k(k>=1而且k<=n),要求在线性时间内找出这n个元素中第k小的元素。

方法

  • 随机快速排序
#include <stdio.h>
#include <stdlib.h>

int main()
{
   
    int a[100],n,k,i,t,j;//定义变量
    scanf("%d %d",&n,&k);//输入数组大小n,整数k
    for(i=0;i<n;i++)//循环输入数组元素值
    {
   
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
   
       for(j=i+1;j<n;j++)
       {
   
           if(a[i]>a[j])//若a[i]大于a[j],交换
           {
   
              t=a[i];
              a[i]=a[j];
              a[j]=t;
           }
       }
    }
    printf("%d",a[k-1]);//输出第k项
}
  • 利用中位数线性时间选择
#include <stdio.h>
#define SIZE (29)

//主函数
int main (void);
//递归分组
int Select
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值