- #include<stdio.h>//折半查找下標,數從大到小排列
- void main()
- {int i;
- int d;
- int m=0;//最大值坐標
- int n=14;//最小值坐標
- int k;
- int p;
- int o;
- int q=16;
- int a[15];//用到的變量是越來越多了
- printf("please input 15 number from big to small and desired number:\n");
- for(i=0;i<=14;i++)
- {
- scanf("%d",&a[i]);//先輸入15個數
- }
- scanf("%d",&d);//再輸入要查找的數
- for(k=1;k<=4;k++)
- {
- q=q/2;//每比較一次坐標變化量折半
- p=q-2;
- if(d==a[(m+n)/2])
- {
- printf("the coordinate is %d\n",(m+n)/2);
- o=1;
- }
- else if(d>a[(m+n)/2])
- {
- m=(m+n)/2-1-p;//這個6我將來是想換掉,因為沒有可重復性
- n=(m+n)/2-1;//將來這個l是要除以2的
- }
- else
- {
- m=(m+n)/2+1;
- n=(m+n)/2+1+p;
- }
- }
- if (o!=1)
- {printf(" do not exist\n");}
- }
復制代碼
|