c_cpp 找到数组中最小和最小的元素

Posted

tags:

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

#include <iostream>
using namespace std;

int merge(int a[],int l,int m, int r){
    int n1=m-l+1,n2=r-m;
    int b[n1],c[n2];
    for(int i=0;i<n1;i++)
        b[i]=a[i+l];
    for(int i=0;i<n2;i++)
        c[i]=a[i+m+1];

    int i=0,j=0,k=l;
    while(i < n1 && j<n2){
        if (b[i]<c[j])
            a[k++]=b[i++];
        else
            a[k++]=c[j++];
    }
    while(i<n1)
        a[k++]=b[i++];
    while(j<n2)
        a[k++]=c[j++];
}

int mergesort(int a[],int l,int r){
    if (r>l){
        int m=(l+r)/2;
        mergesort(a,l,m);
        mergesort(a,m+1,r);
        merge(a,l,m,r);
    }
}

int main(){
    int n;
    cin >> n;
    int a[n];
    for(int i=0;i<n;i++)
        cin >> a[i];

    mergesort(a,0,n-1);

    int l=0,r=n-1,min_sum=INT_MAX,min_l,min_r;
    while(l<r){
        int sum = a[l]+a[r];
        if (abs(min_sum)>abs(sum)){
            min_sum = sum;
            min_l = l;
            min_r = r;
        }
        if (sum<0)
            l++;
        else
            r--;
    }
    cout << min_sum<<"  "<<a[min_l]<<"  "<<a[min_r];
}
#include<iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];

    int min1=a[0], min2=a[0];

    for (int i=1;i<n;i++){
        if (a[i] < min1 && a[i] < min2){
            min2 = min1;
            min1 = a[i];
        }
        if (a[i] > min1 && a[i] < min2)
            min2 = a[i];
    }
    cout<<min1<<"  "<<min2;
}

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

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

c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口

c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口

c_cpp 从两个排序的数组中获取第k个最小元素。数组中的前k个

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

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