⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.txt

📁 求第K个最小值 比2分法还快的算法 只要比N-1次就行
💻 TXT
字号:
#include<stdio.h>

#define MAXSIZE 100
typedef int datatype;
typedef struct
{datatype data[MAXSIZE];
  int last; 
 }SeqList;

int n,i;
SeqList *CreatSeqList()          /*输入数建立链表*/
{SeqList *q;
 int x2;
q=(SeqList *)malloc(sizeof(SeqList));
printf("输入%d个数:\n",n);
while(i<n)
  {scanf("%d",&x2);
    q->data[i]=x2;
  i++;
}
q->last=n-1;
return q;

}

datatype part(SeqList *q,int a,int b,int k)
{ 
    int i,j; 
    datatype m,t;

    m=q->data[a+k-1], q->data[a+k-1] = q->data[b],q->data[b] = m;
    for (i=a-1, j = a; j != b; ++j)
        if (q->data[j] < m)
            t=q->data[++i], q->data[i]=q->data[j], q->data[j]=t;
    t=q->data[++i], q->data[i]=q->data[j], q->data[j]=t;

    if (k==i-a+1) return m;
    if (k>i-a+1) return part(q, i+1, b, k-i+a-1);
    else        return part(q, a, i-1, k);
} 


main()
{SeqList *q;
datatype A;
  int k;
 printf("输入个数:\n");
 scanf("%d",&n);

q=CreatSeqList();

printf("输入K值:\n");
scanf("%d",&k);
A=part(q,0,q->last,k);
 printf("第%d个最小值为: %d\n",k,A);
getch();
return 0;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -