- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
补充自学算法;用简单选择法对10个数排序;;代码提示:
int a[10],i,j,k,t;
//输入10个数存于数组a中(请完善该部分代码)
for(i=0;i<9;i++) //10个数要排9趟,每趟确定a[i],即从a[i]到a[n-1]找到最大的数
用k记录其下标,然后a[k]和a[i]交换
{ k=i; //假设当前无序序列第一个数为最大数
for(j=i+1;j<10;j++) //从下一个数开始到最后去找
是否有更 大的数
if(a[j]<a[k]) k=j; //若有,则把下标记录在k变量中
if(i!=k) //将找到的最大数k下标元素和当前的第一个元素i下标元素交换
{ t=a[i]; a[i]=a[k]; a[k]=t; }
}
//顺序输出各元素值即为有序序列(请完善该部分代码);; 折半查找 有7个数已经按从小到大的顺序存储在数组中,输入一个数,用折半查找法查找这个数是否在数组中,如果在,输出???下标,如果不在,输出0。数组的下标i表示第i个元素,数组的下标0处不存储数。
算法思路:
折半查找又称对分查找,是对有序表进行的一种查找。
其基本思想是:
先确定待查找的数据元素的范围,然后逐步缩小范围直到找到要查找的数据元素或无法找到该元素为止。
具体思路是:
最初待查找的数据元素的范围是整个数组,找到数据元素范围的“中间元素”,将其与待查找的元素x比较,如果当前元素的值与给定值x相等,则查找成功;如果当前元素小于给定值x,则说明被查找数必在前半区间内;反之则在后半区间内。这样把查找区间缩小了一半,继续进行查找。;#include <stdio.h> /* 预编译命令*/
#define n 7
void main() /* 主函数*/
{ /* 主函数开始*/
int a[n+1]={0}; /* 用a存储这7个数,并初始化*/
int mid; /* 要比较的数的下标*/
int low=1; /* 最小数的下标*/
int high=n; /* 最大数的下标*/
int x; /* 要查找的数*/
int i; /* 循环变量*/
printf("请输入已排序的数组元素的值:\n");
for(i=1;i<=n;i++)
{ printf("a[%d]=",i); scanf("%d",&a[i]); } ; printf("请输入您要查找的数:");
scanf("%d",&x);
while(low <= high)
{ mid = (low+high)/2;
if(x==a[mid]) /* 找到待查找元素*/
break;
else if(x<a[mid]) /* 继续查找前半区间*/
high=mid-1;
else low =mid+1; /* 继续查找后半区间*/
}
if(x == a[mid])
printf("查找到的位置为:%d\n",mid);
else
printf("查找到的位置为:%d\n",0);
};插入排序法:在一个5个元素的升序排列的数组中,任意输入一个数插入其中,要求保持原来的排列顺序。输出结果。;完整程序如下:
# include <stdio.h>
void main()
{
int a[10],i,x,p;
printf("Input 5 numbers:"); /*5个数按由小到大的顺序输入*/
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("Input insert number:");
scanf("%d",&x);
for(p=5,i=0;i<5;i++) //p的初值为5,找查找的位置
if(x<a[i]) //找到第一个比x大的元素,该位置即为要插入的位置
{ p=i;
break;
}
for(i=4;i>=p;i--) //移动数据,空出位置
a[i+1]=a[i];
a[p]=x; //写入待插入的数据
printf("The after insert score:\n");
for(i=0;i<6;i++)
printf("%6d",a[i]);
printf("\n")
文档评论(0)