美文网首页
C语言实现用分治法找出第k小元素的算法

C语言实现用分治法找出第k小元素的算法

作者: passwd_ | 来源:发表于2017-03-20 16:04 被阅读0次
#include <stdio.h>


#define NUM 1001
int a[NUM];
//自定义swap函数 交换x与y的值
void swap(int *x,int *y)
{
     int temp;
     temp = *x;
     *x = *y;
     *y = temp;

}
int select(int left, int right, int k)
{
    if (left >= right) return a[left];
    int i = left;      //从左到右的指针
    int j = right+1;   //从右到左的指针
    //最左边元素为分界数
    int pivot = a[left];
    //左侧>=pivot的元素与右侧<=pivot的元素交换
    while (true) 
    {   //寻找左侧>=pivot的元素
        do {
            i = i+1;
        } while (a[i] < pivot);
        //寻找右侧<=pivot的元素
        do {
            j = j-1;
        } while (a[j] > pivot);
        if (i >= j) break;   //没有发现需要交换的元素 跳出循环
        swap(&a[i],&a[j]);
    }
    //快速排序算法描述中的nleft = j-left
    if (j-left+1 == k) return pivot;
    a[left] = a[j];                       //交换pivot与a[j]
    a[j] = pivot;                         //节点j处划分左右子集
    if (j-left+1 < k)
    //对一个段进行递归调用
    return select(j+1, right, k-j+left-1); //在右子集中查找
    else return select(left, j-1, k);      //在左子集中查找
}

int main()
{
    int n,k;
    
    while (scanf("%d%d",&n,&k))
    {
        for (int i=0; i<n; i++)
        scanf("%d",&a[i]);
        printf("%d",select(0,n-1,k));
    }
    return 0;
}

运行结果

相关文章

  • C语言实现用分治法找出第k小元素的算法

  • 寻找第 k 小元素-分治法

    问题 对一个已经序列A[1,...,n],如何寻找其第k小的元素? 算法 使它在O(n)的时间复杂度内解决 code

  • 选择第k小元素(分治法)

    1、伪码 原理参见 屈婉玲老师 算法设计与分析 ORZ

  • [小撒学算法]分治法与合并排序

    小撒是一只好学的小鸭子,这天,小撒在学习算法 分治法 分治法(divide-and-conquer)是一种算法设计...

  • 算法习题

    4 递归与分治 选择问题 例4.9 查找第k个小/大元素 n个元素,元素划分n/5(不带余数),每组五个元素,不足...

  • 分治算法

    分治算法字面意思就是将一个复杂的数据进行分开计算,分治 的策略就是: 一个分治法将规模为n的问题分成k个规模为n/...

  • 快排算法

    转:微信公众号:程序员小灰 快排算法 是按分治算法的思路进行排序的。 选定参照元素后,每次比较都按分治算法将小的移...

  • Divide and Conquer

    算法之 分治法 Divide and Conquer 分治法: 分治法的设计思想是:将一个难以直接解决的大问题,分...

  • 2018-07-03

    线性时间选择 给定线性序集中n个元素和一个整数k,1<=k<=n,要求找出这n个元素中第k小的元素,即如果将这n个...

  • 基本算法——BFPRT线性查找算法

    BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPR...

网友评论

      本文标题:C语言实现用分治法找出第k小元素的算法

      本文链接:https://www.haomeiwen.com/subject/jhcinttx.html