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

admin2013-12-15  57

问题 下面程序段中,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    if(i    while(i%j&&t>=a)i++;
    if(i
    }
     while(i    a=t;
    if  (2);
    if(i    low=(3) ;
    else
    high=(4) ;
    }
    while  (5) ;
    return(a[k]);
    }

选项

答案(1)t=a[loW] (2)(i==k) return (3)i+1 (4)i-1 (b)i!=k

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

最新回复(0)