取第k个元素

来源:互联网 发布:分类目录源码帝国cms 编辑:程序博客网 时间:2024/06/06 17:05

ACM模版

取第k个元素

/* *  取第k个元素 *  k = 0 ... n - 1,平均复杂度O(n) 注意a[]中的顺序被改变 */#define _cp(a,b) ((a) < (b))typedef int elem_t;elem_t kth_element(int n, elem_t *a, int k){   //  a[0 ... n-1]    elem_t t, key;    int l = 0, r = n - 1, i, j;    while (l < r)    {        for (key = a[((i = l - 1) + (j = r + 1)) >> 1]; i < j;)        {            for (j--; _cp(key, a[j]); j--);            for (i++; _cp(a[i], key); i++);            if (i < j)            {                t = a[i], a[i] = a[j], a[j] = t;            }        }        if (k > j)        {            l = j + 1;        }        else        {            r = j;        }    }    return a[k];}
0 0