zoukankan      html  css  js  c++  java
  • 在一个数组中,找第n小的数

    //使用快排的思想,查找第几小的元素
    #include<iostream>
    using namespace std;

    int arr[10]={5,3,1,6,8,4,9,90,2,10};

    int Partition(int m,int p)  //划分集合 arr[m:p-1],返回arr[m]所在位置的下标
    {
     int i,j;
     int flag=arr[m];//在这个函数中,不是使用的中间元素作为标志元素 也不是随机生成的 就是默认的使用传进来数组的第一个元素
        i=m;
     j=p-1;
     while(1)
     {
      while(arr[i]<=flag && i<p-1 ) //遇到小于它的 继续往右走
       i++;
      while(arr[j]>=flag && j>=m)
       j--;
      if(i<=j)// 交换
      {
       int temp;
       temp=arr[i];
       arr[i]=arr[j];
       arr[j]=temp;
      }
      else
       break;   
     }
     arr[m]=arr[j];//最后两个指针,相互错开了
     arr[j]=flag;
     //cout<<j<<endl;
     return j; //返回数组下标

    }


    int Select(int n, int go) //数组长度为n
    {
     cout<<"select"<<endl;
     int parret;
     int low=0,high = n;
          
     while(1)
     {
        parret=Partition(low,high);
        if(parret == go - 1)
         return arr[parret];
        if(parret < go -1 )
        {
         low= parret+1;
        }
        else
         high=parret;
     }
    }

    int main()
    {
       
     cout<<"请输入要找第几小的元素"<<endl;
     int goal;
     scanf("%d",&goal);
     int temp=Select(10,goal);
        printf("你要找的元素为:%d \n",temp);
     return 0;
    }

    为什么总是不对呢????

  • 相关阅读:
    数组
    JavaScript语法
    Math.random()
    第二第三周暑期集训总结
    第一周
    ACM课程学习总结
    专题四---总结
    专题四--1004
    专题四--1005
    专题四--1006
  • 原文地址:https://www.cnblogs.com/qingcheng/p/2028608.html
Copyright © 2011-2022 走看看