首页 > 其他分享 >找到数组中第k小的元素

找到数组中第k小的元素

时间:2022-10-19 17:22:43浏览次数:49  
标签:tmp partition end start 找到 元素 int while 数组

int partition(int a[], int start, int end) {//快排的partition操作
    if (start >= end) {
        return start;
    }
    int i = start, j = end;
    int tmp = a[start];
    while (i < j) {
        while (i < j && a[j] >= tmp) {
            j--;
        }
        a[i] = a[j];
        while (i < j && a[i] <= tmp) {
            i++;
        }
        a[j] = a[i];
    }
    
    a[i] = tmp;
    return i;
}
int findMinK(int a[], int start, int end, int k) {

    int pivot = partition(a, start, end);
    int index = pivot - start + 1;//枢轴所指元素是当前部分的第几小元素
    if (index == k) {//如果恰好为第k小,直接返回
        return a[pivot];
    } else if (index < k) {//如果小于k,则从数组后面返回第k - index小的元素即可
        return findMinK(a, pivot + 1, end, k - index);
    } else {//如果大于k,则从数组前面返回第k小的元素
        return findMinK(a, start, pivot - 1, k);
    }
}

int main() {
    int b[10] = {10, 3, 8, 9, 6, 5, 2, 4, 7, 1};
    cout << findMinK(b, 0, 9, 5) << endl;
    return 0;
}

标签:tmp,partition,end,start,找到,元素,int,while,数组
From: https://www.cnblogs.com/zawaludo/p/16807095.html

相关文章

  • go 数组去重
    //rmDuplicate数组去重funcrmDuplicate(list[]string)[]string{varx[]stringfor_,i:=rangelist{iflen(x)==0{x=ap......
  • RestTemplate请求参数有MultipartFile[] 附件数组
    一、RestTemplate请求参数有MultiplateFile[]附件数组的情况,该如何处理二、代码示例@PostMapping("/testSendEmail")@ResponseBodypublicbooleantestSendEma......
  • React:数组、列表渲染
    数组JSX允许在模板中插入数组,数组会自动展开所有成员vararr=[<h1>HTML</h1>,<h2>CSS</h2>];ReactDOM.render(<div>{arr}</div>,document.getElementB......
  • vue框架项目获取当前元素指定的元素
    //当前点击的元素e.target//绑定事件的元素e.currentTarget//获得点击元素的前一个元素......
  • JavaScript数组常用数组函数
    constarr=[1,12,13,4,5,6,7,8];//找出符合条件的第一个元素,并返回。否返回undefinedconstfount=arr.find((x)=>{returntypeof(x)==="number";})consol......
  • Demo38_java数组05_前半段
    //数组与for循环的基本操作运行packagecom.HuanXin.array_6;publicclassDemo03{publicstaticvoidmain(String[]args){int[]A={1,2,3,4,5};......
  • Python list 中删除元素的方法
    在python列表中删除元素主要分为以下3种场景:根据目标元素所在的索引位置进行删除,可以使用del关键字或pop()方法;根据元素本身的值进行删除,可使用列表(list类型)提供的remove(......
  • leetcode 380. Insert Delete GetRandom O(1) O(1) 时间插入、删除和获取随机元素 (
    一、题目大意实现RandomizedSet类:RandomizedSet()初始化RandomizedSet对象boolinsert(intval)当元素val不存在时,向集合中插入该项,并返回true;否则,返回false......
  • 常用的数组方法有哪些?
    concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。find()方法返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined。f......
  • Java中使用List的add方法后元素相同问题
    在写JavaWeb时,我在后端通过JDBC读取了数据后逐个使用List.add()方法添加元素并通过request方法传给jsp页面解析,但是添加以后出现了在列表里有n个(假设添加了n个元素)最后一个......