C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下:
编写一个完整的程序,实现如下功能。
(1) 输入10个无序的整数。
(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序。
(3) 要求任意输入一个整数,用折半查找法从排好序的10个数中找出该数,若存在,在主函数中输出其所处的位置,否则,提示未找到。
提示:可定义input函数完成10个整数的输入,sort函数完成输入数的排序,search函数
完成输入数的査找功能。
下面是具体代码:(本人懒,没写注释,不过仔细看代码,还是很简单的)
1 #include <stdio.h> 2 #define N 10 3 4 // 13 34 3 15 26 18 19 14 30 24 5 6 int *input(); 7 int *sort(int m[]); 8 void search(int m[],int c); 9 main() 10 { 11 int *a; 12 int i,k; 13 int m[N]; 14 a=input(); 15 for(i=0;i<N;i++) 16 { 17 m[i]=*a; 18 a++; 19 } 20 a=sort(m); 21 printf("\n排序结果:\n"); 22 for(i=0;i<N;i++) 23 { 24 m[i]=*a; 25 a++; 26 printf("%d\n",m[i]); 27 } 28 29 for(i=0;i<100;i++) 30 { printf("请输入您想查找的数:"); 31 scanf("%d",&k); 32 search(m,k); 33 } 34 35 } 36 void search(int m[],int c) 37 { 38 int h,l,i; 39 for(h=0,l=N;h<=l;) 40 { 41 i=(h+l)/2; 42 if(c==m[i]) 43 { 44 printf("是第%d个元素\n",i+1);break; 45 } 46 else if(c>m[i]) 47 l=i-1; 48 else if(c<m[i]) 49 h=i+1; 50 } 51 if(h>l) 52 printf("无此元素"); 53 return 0; 54 } 55 int *sort(int m[]) 56 { 57 int i,j; 58 int index,temp; 59 for ( i = 0; i < N - 1; i++) 60 { 61 temp = 0; 62 index = i; 63 for ( j = i + 1; j < N; j++) 64 { 65 if (m[index] < m[j]) 66 { 67 index = j; 68 } 69 } 70 temp = m[index]; 71 m[index] = m[i]; 72 m[i] = temp; 73 } 74 return m; 75 } 76 int *input() 77 { 78 printf("请输入10个整数:\n"); 79 static int m[N]; 80 int i; 81 for(i=0;i<N;i++) 82 { 83 scanf("%d",&m[i]); 84 } 85 return m; 86 }