| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 458 人关注过本帖
标题:一个一维数组 问题求解
只看楼主 加入收藏
马路
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-3-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
一个一维数组 问题求解
输入一个一维数组a[n],不知道n的奇偶情况,随机输入一个数,运用折半算法分奇偶两种情况在这个数组中找出这个数的位置,并输出位置。
谢谢
搜索更多相关主题的帖子: 问题求解 
2010-03-22 22:08
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:15 
#include <stdio.h>
#include <stdlib.h>
int fun(int *a, int n, int k)
{
    int low = 0, high = n - 1;
    int mid = (low + high)/2;
    do
    {
        mid = (low+high)/2;
        if (k < a[mid])
        {
            high = mid-1;
        }else if (k > a[mid])
        {
            low = mid+1;
        }else
        {
            return mid;
        }
    } while(low <= high);
    return -1;
}
int main(void)
{
    int *a;
    int i, k;
    int n;
    scanf("%d", &n);
    a = (int *)malloc(sizeof(int)*n);
    for (i = 0; i < n; i ++)
    {
        scanf("%d", &a[i]);
    }
    printf("Input what you want to find:\n\t");
    scanf("%d", &k);
    i = fun(a, n, k);
    if (-1 == i)
    {
        printf("didn't find!\n");
    }else
    {
        printf("a[%d] is what you want!\n", i);
    }
    free(a);
    return 0;
}
保证你输入的数组是有序的(本程序要求是升序),否则用二分法无法准确查找,奇偶无关
2010-03-23 00:38
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
为什么不先排下升序呢 这样不就更完美了!
2010-03-23 09:13
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
回复 3楼 hahayezhe
不知道楼主要的是原始位置还是排序后的位置。。。不过实现很简单。。。
2010-03-23 09:20
马路
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-3-17
收藏
得分:0 
回复 4楼 ldg628
排序后
谢谢
2010-03-23 15:43
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
    for (i = 0; i < n; i ++)
    {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j ++)
        {
            if (a[i] > a[j])
            {
                a[j] = a[i] + a[j];
                a[i] = a[j] - a[i];
                a[j] = a[j] - a[i];
            }
        }
    } //加上这段就行了,前面定义一下变量j
    printf("Input what you want to find:\n\t");
2010-03-23 15:51
马路
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-3-17
收藏
得分:0 
回复 6楼 ldg628
谢谢呀,呵呵
2010-03-24 12:13
快速回复:一个一维数组 问题求解
数据加载中...
 
   



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

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