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}.依次類推,最後排序完成。