c语言进一法
㈠ c语言插入法排序
算法要求:用插入排序法对10个整数进行降序排序。
算法分析:将序列分为有序序列和无序列,依次从无序序列中取出元素值插入到有序序列的合适位置。初始是有序序列中只有第一个数,其余n-1个数组成无序序列,则n个数需进n-1次插入。寻找在有序序列中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间。
算法源代码:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入*/
{
t=a[i]; /*将待插入数暂存于变量t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下标0 ~ i-1)中寻找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,则当前元素后移一个位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
算法特点:每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。该算法的特点是在寻找插入位置的同时完成元素的移动。因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。仍可进行升序或降序排序。
㈡ C语言编程插入法排序
for(j=i;j<11;j++)
a[j+1]=b;
你这步会把 a[i]后面的数全变为 b
#include <stdio.h>
void main(){
int i,j,n;
int a[11],b;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
if(n>=a[9]) //因为下面的if(n<a[i]) 漏掉了这个情况,就是n最大的情况
a[10]=n;
for(i=0;i<11;i++)
if(n<a[i])
{
b=a[i];
a[i]=n; //把n放进去
break; //遇到第一个n<a[i],就停止
}
for(j=10;j>i+1;j--)
a[j]=a[j-1]; //a[10]原来是空的,a[9]的值直接放入a[10],然后a[8]放a[9]……到a[i]为止
a[i+1]=b;
for(i=0;i<11;i++)
printf(" %d",a[i]);
printf("\n");
}
㈢ C语言进一法
方法多的是,看你怎么使用:int i;float x;x=3.1;i=x;if(x>i)i++;
㈣ c语言中8进制锋8进一,关键是怎么个进一法看不懂求解。
八进制中的八个数0 1 2 3 4 5 6 7。假设第一个数是01,到了07时就要向前进一位既10后面的数归零。以此类推。
㈤ c语言如何四舍五入 跟 进一法除法 的 算法
#include<stdio.h>
int main()
{int a,b;
scanf("%d%d",&a,&b);
printf("%d/%d(四舍五入)=%d ",a,b,(int)((float)a/b+0.5));
printf("%d/%d(进一法)=%d ",a,b,(int)(float)(a+b-1)/b);
return 0;
}
㈥ 用C语言来编进退法的搜索区间
用C语言来编进退法的搜索区间的源代码如下:
#include<stdio.h>
void main()
{
int a[20],x,i,start,end;
printf("input 20 numbers: ");
for(i=0;i<20;i++) scanf("%d",&a[i]);
printf("please enter the number: ");
scanf("%d",&x);
for(start=0,end=19;start<=end;)
{
i=start+(end-start)/2;
if (x==a[i])
{
printf("%d",i+1);
getch();
return;
}
else if (x>a[i]) end = i-1;
else start=i+1;
}
(6)c语言进一法扩展阅读
1、C语言查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。
2、其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。
㈦ c语言中,&的用法是怎样的
&有很多种用法:
二进制按位与如,a&b
取地址:如int *pa=&a;
两个&&:逻辑与,如:(a>0)&&(a<100)
在C++中还可以表示引用。。。
还有什么不明白的,可以继续追问~~
㈧ c语言去尾法怎么写
//常用的两个c语言函数:
//向上取整ceil(中文意思天花板),进内一法。
//向下取整floor(中文意思地板容),去尾法。
还有个简单的方法是:
在计算出的数结尾加上0.5,这样计算机输出的数就相当于四舍五入了。
同样如果小数位只有一位就加上0.9,有两位就加上0.99,这样就可达到1.1~1.9(1.01~1.99)的数在输出时都是2,可以达到进一法。去尾法同理,只不过把加号变为减号。
㈨ C语言插入法
这段程序是从前往后进行排序的。该程序r[1]--r[10]存储10个数,r[0]用来做标记。首先对于单独的r[1]是有序的。所以我们从r[2]开始和r[1]比较。这是为什么第一个for循环for(i=2;i<11;i++);从i=2开始的原因。进入第一个for循环(是排序的那个,不是输入的那个)之后首先把r[i]元素保存在r[0]中,然后让该元素和其前面的元素相比较这一步反映在第二个for循环中for(;r[j]>r[0];j--),在这里体现出了r[0]的标号作用,我们并不关心j是否会小于0,因为当j==0是r[j]>r[0]已经不再成立。循环体内时比r[0]大的元素依次后移,推出了循环,这样当第二个for循环退出时就是因为r[j]>r[0]不再成立,即找到了一个元素r[j]小于等于r[0];j之后的都比r[0]大。这时r[0]就应该在j+1的位置,即r[j+1]=r[0];这样经过一个内层的for循环就把原来i位置的元素按顺序插入到其前面有序的元素当中去了,当i==10全部排序完成。如原数组的元素为r[]={3,2,1,8,5},当i==2时的依次内循环后变为r[]={2,3,1,8,5};i==3时,我们要拿1和全面的元素比较,得到r[]={1,2,3,8,5}.依次类推,最后排序完成。