• 查找第k小的元素-减治法


    问题描述:n个数中找出第k小的元素

    输入:

    9
    5 3 8 1 4 6 9 2 7
    4

    输出:

    4

    用快排思想先找出数组中第一个元素的位置(博客中有快排算法):

                         排序前:5 3 8 1 4 6 9 2 7

                         排序后:2 3 4 1 5 6 9 8 7    (5的位置确定了)

    用k与元素5的下标计较,等于就输出,小于递归5前的元素,大于递归5后的元素

    代码:

    #include<iostream>
    
    using namespace std;
    
    void QuickSort(int *a,int left,int right,int k)
    {
        int i=left;
        int j=right;
    
        while(i<j)
        {
            int temp;
            //从后往前比较
            while(i<j && a[i]<a[j])
                j--;
            if(i<j)
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
                i++;
            }
            //从前往后比较
            while(i<j && a[i]<a[j])
                i++;
            if(i<j)
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
                j--;
            }
        }
        
        if(k==i)
        {
            cout<<a[k];
            return;
        }
        else if(k<i)
        {
            QuickSort(a,left,i-1,k);
        }
        else
        {
            QuickSort(a,j+1,right,k);
        }
    }
    int main()
    {
        int n;
        int k;
        int a[100];
        cin>>n;
        int left=1,right=n;//对应下标位置
        for(int i=1; i<=n; i++)
        {
            cin>>a[i];
        }
        cin>>k;
        QuickSort(a,left,right,k);
        return 0;
    }
  • 相关阅读:
    第08组 Alpha冲刺 (6/6)
    第08组 Alpha冲刺 (5/6)
    第08组 Alpha冲刺 (4/6)
    第08组 Alpha冲刺 (3/6)
    第08组 Alpha冲刺 (2/6)
    第08组 Alpha冲刺 (1/6)
    第一次编程作业
    第01组 Alpha冲刺(6/6)(组长)
    第01组 Alpha冲刺总结(组长)
    第01组 Alpha冲刺 (5/6)(组长)
  • 原文地址:https://www.cnblogs.com/xxaf/p/12958237.html
Copyright © 2020-2023  润新知