| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 370 人关注过本帖
标题:求答案请帮帮忙
只看楼主 加入收藏
永远不懂
Rank: 1
来 自:徐州
等 级:新手上路
帖 子:35
专家分:9
注 册:2009-11-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求答案请帮帮忙
有15个数按由大到小的顺序存放在一个数组中,输入一个数,用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,则输出“无此数”。
2009-11-04 19:11
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:5 
#define LONG 15
int intcmp(const void *v1,const void *v2);
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
void main()
{
   int a[LONG];
   int i,*loc,number_;
   for(i=0;i<LONG;i++)
   scanf("%d",a+i);
   qsort(a,LONG,sizeof(a[LONG]),intcmp);
   for(i=0;i<LONG;i++)
   printf("%-6d",a[i]);
   printf("\n");
   scanf("%d",&number_);
   loc=(int *)bsearch(&number_, a,LONG,sizeof(a[LONG]),intcmp);
   if(loc!=NULL)
   printf("该数的位置是%d",loc-a);
   else
   printf("NO");
   getch();
}
int intcmp(const void *v1,const void *v2)
{
   return (*(int *)v2-*(int *)v1);
}
这是我写的程序,不知道是否符合作者的心意!!!

愿用余生致力编程
2009-11-04 21:44
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:10 
# include <stdio.h>
#define N 5
void main()
{
int a[N];
int i,x,k;
printf("please input the original numbers in the array:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("please input the number you want to look for:\n");
scanf("%d",&x);
if(a[0]<x||a[N-1]>x)
printf("There is no such number.\n");
else
{
k=N;
for(i=0;i<k;i++)
    {
    if(a[(k+i)/2]>x)
    i=k/2+1;
    else
    k=k/2;
    if(a[i]==x)
    {
    printf("%d",i);
    break;
    }
    }
}
}

这是我的思路。输出的位置是从0算起的。可能有错误,呵呵,因为我原来的程序本以为ok了,验证了几个发现了错误,这个只是验证的时候没发现错误。
2009-11-04 22:28
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:5 
程序代码:
// 查找与排序.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <stdlib.h>

int search_bin(int a[],int n,int key)
{
    int low,high,mid;
    low=0;
    high=n-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(a[mid]==key)
        {
        return mid;        
        }
        else if(a[mid]>key)
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }
    }
    return 0;
}


int partition(int a[],int low,int high)
{
    int key;
    a[0]=a[low];
    key=a[low];
    while(low<high){
        while(low<high && a[high]>=key)
            high--;
        a[low]=a[high];
        while(low<high && a[low]<=key)
            low++;
        a[high]=a[low];
    }
    a[low]=a[0];
    return low;
}

void Qsort(int a[],int low,int high)
{
    int loc;
    if(low < high)
    {
        loc=partition(a,low,high);
        Qsort(a,low,loc-1);
        Qsort(a,loc+1,high);
    }
}

void output(int a[],int i)
{
    for(int k=1; k<i; k++)
        printf("%4d",a[k]);
}
void input(int a[],int i)
{
    for(int k=1; k<i; k++){
        scanf("%d",&a[k]);
    }
}
int main(int argc, char* argv[])
{
    int w;
    int a[10];
    input(a,10);
    Qsort(a,1,9);
    output(a,10);
    w=search_bin(a,10,8);
    if(0==w)
    {
        printf("\nSORRY\n");
    }
    else
    {
        printf("\n%4d\n",w);
    }
    return 0;
}
以前写的,改了几下,有错误,请指正!
2009-11-04 22:59
快速回复:求答案请帮帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031417 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved