c_cpp 非排序数组中的最小元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 非排序数组中的最小元素相关的知识,希望对你有一定的参考价值。

// https://www.geeksforgeeks.org/kth-smallestlargest-element-unsorted-array/
#include <iostream>
using namespace std;

void minHeap (int a[], int i, int n) {
    int l=2*i+1, r = 2*i+2, smallest = i;
    if (l<n) {
        if (a[l] < a[smallest])
            smallest = l;
        if (r<n && a[r] < a[smallest])
            smallest = r;
        if (smallest!= i) {
            swap(a[i], a[smallest]);
            minHeap(a, smallest, n);
        }
    }
}
void extractMin (int a[], int n, int k) {
    int s;
    for (int i=0; i<k;i++) {
        s= a[0];
        a[0]= a[n-1-i];
        minHeap(a, 0, n-i);
    }
    cout<< s<< "\n";
}

int main() {
    int t;
    cin>>t;
    while (t-->0) {
        int n,k;
        cin>>n;
        int a[n];
        for (int i=0;i<n;i++)
            cin>>a[i];
        cin>>k;
        for (int i=n/2-1; i>=0; i--)
            minHeap(a, i, n);
        extractMin (a, n, k);
    }
}

以上是关于c_cpp 非排序数组中的最小元素的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 通过最小增量使元素在排序数组中不同

c_cpp 递增排序的数组(元素不重复),旋转一定长度后,求数组中最小的数。如{1,2,3,4,5,6},旋转后{4,5,6,1,2, 3},旋转后的数组最小值为1

c_cpp 使用分而治之的方法查找未排序数组中的最小值和最大值

c_cpp 搜索已排序和旋转的数组中的元素

c_cpp 找到最小长度未排序的子阵列,排序使整个数组排序

17把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转(