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 }

 

posted @ 2016-06-05 01:42  须小弥  阅读(1893)  评论(0编辑  收藏  举报