1 #include<stdio.h> 2 3 //直接插入法 4 void D_insert(int s[],int n); 5 int main() 6 { 7 int i; 8 int a[6]; 9 printf("please enter five numbers: "); 10 for(i=1;i<6;i++) 11 { 12 scanf("%d",&a[i]); 13 } 14 D_insert(a,5); 15 printf("after number: "); 16 for(i=1;i<6;i++) 17 { 18 printf("%4d",a[i]); 19 } 20 printf(" "); 21 } 22 void D_insert(int s[],int n) 23 { 24 int j,i; 25 26 for(i=2;i<=n;i++) 27 { 28 s[0]=s[i]; 29 j=i-1; 30 while(s[j]>=s[0] && j>1) 31 { 32 s[j+1]=s[j]; 33 j--; 34 } 35 s[j+1]=s[0]; 36 37 } 38 }
这是相应的代码
在方法函数的时候,又卡壳了。这是在n次编写之后的卡壳。
下面就方法函数具体解释一下。
首先空出一个来当哨兵。这里设定的为a[0];总共有n个数,则循环n-1次。所以i从2到n开始循环。把a[0]中放入要插入的数字,然后依次和之前的数字比较,如果比其小,则元素后移。
按照这个原理,则有另一种的表示方法了
1 #include<stdio.h> 2 3 //直接插入法 4 void D_insert(int s[],int n); 5 int main() 6 { 7 int i; 8 int a[6]; 9 printf("please enter five numbers: "); 10 for(i=1;i<6;i++) 11 { 12 scanf("%d",&a[i]); 13 } 14 D_insert(a,5); 15 printf("after number: "); 16 for(i=1;i<6;i++) 17 { 18 printf("%4d",a[i]); 19 } 20 printf(" "); 21 } 22 void D_insert(int s[],int n) 23 { 24 int j,i; 25 26 for(i=2;i<=n;i++) 27 { 28 s[0]=s[i]; 29 30 while(s[i-1]>=s[0] && i>1) 31 { 32 s[i]=s[i-1]; 33 i--; 34 } 35 s[i]=s[0]; 36 37 } 38 }