下面程序段中,search(a,n,k)的功能是在数组a的前n(n≥1)个元素中找出第k(1≤ k≤n)小的值。这里假设数组a中各元素的值都不相同。 define MAXN 100 int a[MAXN],n,k; int search c

admin2014-01-13  58

问题 下面程序段中,search(a,n,k)的功能是在数组a的前n(n≥1)个元素中找出第k(1≤
  k≤n)小的值。这里假设数组a中各元素的值都不相同。
  define MAXN 100
  int a[MAXN],n,k;
  int search c(int a[],int n,int k)
    int low,high,i,j,m,t;
    k--;low=0;high=n-1;
    do
    i=low;j=high;(1);
    do
    {
    while(i<&t    if(i    while(i<&>==a)i++;
    if(i
    }while(i    a=t;   
    if;
    if(i    low=;
    else
    high=(4);
    }while  (5);
    return(a[k]);
    }

选项

答案(1)t=a[10w] (2)(i==k)return (3)i+1 (4)i-1 (5)i!=k 本题程序使用到了快速排序方法。快速排序方法的思想是:通过一趟排序,将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分的记录继续进行排序,以达到整个序列有序的目的。本题程序利用快速排序思想,找到第k个元素的位置(下标k-1,因而开始有k--)。内层do循环以t(t=a[10w])(即第一个空格处)为“枢轴”找到其应在的i位置。这时若i==k,则算法结束(即第二个空格处if(i==k)return;)。否则,就在(i+1)~high之间查找;若i>k,则在low~(i-1)之间查找,直到找到i==k为止。

解析
转载请注明原文地址:https://jikaoti.com/ti/gUU3FFFM
0

最新回复(0)