搜索
首页 电脑/网络 程序设计 C/C++

C语言数据结构“查找”问题

  一、创建项目 lab4 ,完成下面内容 1、编写折半查找算法函数。 该函数接收的参数:一个一维有序数组,和一个给定需要的查找值。(注意传递数组实际上已需要2个参数) 函数功能:根据给定值,找出该值在数组中的位置(即下标),如果找不到,返回-1。
   要求:使用折半查找算法去实现。查找完成时,输出共比较了多少次。 2、完成main函数。 1)创建一个一维整数数组,里面放20个按降序排列的整数。 2)调用第1步编写的函数,查找给定的整数在数组中的位置并输出,如果找不到输出“找不到”。
   这个怎么做?。

全部回答

2012-05-17

0 0
    /* * File: main。
    c * Author: fzhq * * Created on 2012年5月17日, 上午7:08 */ #include #include /** * 折半查找法查找数据,要求数据按照降序排列 * @param inta 数组 * @param iLen 数组长度 * @param iData 查找的数据 * @return 找到返回下标,否则返回-1 */ int search(int inta[], int iLen, int iData) { int iLow, iHigh; //查找边界 int iTemp; //临时变量 int iCompCount; //比较次数 if ((iLen inta[iTemp]) { iHigh = iTemp; } else { iLow = iTemp; } } //循环结束没有找到 printf("\n\n比较次数:%d\n", iCompCount); return -1; } /** * 冒泡排序 * @param inta 正数数组 * @param iLen 数组中的数据数 * @param iMode 排序模式: 0 升序 1 降序 */ void sort(int inta[], int iLen, int iMode) { int i, j; //循环变量 int iTemp; //临时变量 int iSwap; //交换次数 if ((iLen inta[j]) { if (iMode == 0) { //升序排序需要交换,否则不需要 iSwap++; //计算交换次数 inta[i] = inta[j]; //交换数据 inta[j] = iTemp; iTemp = inta[i]; } } else { if (iMode == 1) { //升序排序不需要交换,否则需要 iSwap++; //计算交换次数 inta[i] = inta[j]; //交换数据 inta[j] = iTemp; iTemp = inta[i]; } } } } printf("排序趟数:%d\n", iLen); //冒泡排序趟数不会少 printf("交换次数:%d\n", iSwap); } /* * */ int main(int argc, char** argv) { int i; int iLen; int inta[] = { 12, 13, -18, 100, 98, -500, 800, -800, 0, -324, 123, 321, 456, 543, -123, 900, -90, -10000, 32222, 1234567 }; iLen = sizeof (inta) / sizeof (inta[0]); //动态计算数据数量 sort(inta, iLen, 1); printf("排序结果:"); for (i = 0; i < iLen; i++) { printf("\t%d", inta[i]); } printf("\n\n查找 100 ,所在位置:%d\n", search(inta, iLen, 100)); printf("\n\n查找 -888888 ,所在位置:%d\n", search(inta, iLen, -888888)); return (EXIT_SUCCESS); } 这些都是数据结构的基本知识,建议你好好学学,否则影响将来工作。

2012-05-16

93 0
    二级软件是整不会这个的 建议楼主整一个数据结构的书吧 使用递归算法,今天没空,楼主要是做不出来,等回头我再来写 #include int cnt=0; void find(int a,int aa[],int l,int h) { cnt++; if(l>h) printf("找不到"); else if(a>aa[(l+h)/2]) find(a,aa,(l+h)/2,h); else if(a<aa[(l+h)/2]) find(a,aa,l,(l+h)/2); else { printf("找到\n"); printf("共找了%d次\n",cnt); } } void main() { int a; int aa[80]; int flag=1; int n=0; printf("请输入一个有序数组(数组元素均大于0,且数组元素个数小于80),完毕后请输入0:\n"); while(flag) { scanf("%d",&a); if(a==0) flag=0; else aa[n++]=a; } printf("请输入要查找的数:\n"); scanf("%d",&a); --n; find(a,aa,0,n); } 。
    。

2012-05-16

65 0
你过二级了吗,我有全国二级上机软件,可以传给你!里面各类题型都有,练练就会了。。。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报