爱问知识人 爱问教育 医院库

关于一道C程序题

首页

关于一道C程序题

  排序查找
用选择法对15个学生的成绩按从大到小的顺序排序,15个学生的成绩整数用scanf 输入,如果输入的成绩不在[0,100]之间,则提示“输入错误”。排序完成后,输入一个成绩,要求用折半查找法找出该成绩是该组中第几个元素的值(即第几名)。如果该成绩不在数组中,则输出“无此成绩”。

[实验提示]
1、本题第一步首先对15个成绩排序,可使用冒泡法或选择法排序(冒泡排序算法见教材)。
选择法排序算法思想:
n原数组中选择最小的一个元素,把它和位于第一个位置的元素互换位置;然后,在剩下的n-1个元素中选择最小的一个元素,并把它和第一个位置的元素交换;不断重复这些过程,直到最后两个元素。
如:设有10个元素a[0]~a[9],
第一轮:将a[0]与a[1]~a[9]比较,若a[0]比a[1]~a[9]都小,则不进行交换,即无任何操作。若a[1]~a[9]中有一个以上比a[0]小,则将其中最小的一个(假设为a[i])与a[0]交换,此时a[0]中存放了10个中的最小数。
第二轮将a[1]与a[2]~a[9]比较,将剩下的8个数中最小者a[i]与a[1]对换,此时a[1]中存放的是10个中第二小的数。
依此类推,共进行9轮比较,a[0]~a[9]中已按由大到小的顺序存放。
2、 排序完成后,这15个成绩按由大到小的顺序排列,此时用折半查找法查找某一个成绩效率较高。
折半查找法算法思想:假如有以按由小到大排好序的9个数,a[0]~a[8],其值分别为:1 1517若想查3是否在此数组中,可以先找出表列中居中的数,即a[4],将要找的数3与a[4]比较,a[4]值是9,发现a[4]>3,显然3应当在a[0]~a[4]范围内,而不会在a[5]~a[8]范围内。这样就可以缩小查找范围,甩掉a[5]~a[8]这一部分,即将查找范围缩小为一半。再找a[0]~a[4] 中居中的数,即a[2],将要找的数与a[2] 比较,a[2]的值是5,发现a[2]>3,显然3应当在a[0]~a[2]范围内。这样又将查找范围缩小了一半。再将3与a[0]~a[2]范围内居中的数a[1]比较,发现要找的数3等于a[1],查找结束。一共比较了3次。

提交回答

全部答案

    2006-10-26 11:58:22
  • 题目中给的选择法和折半法的提示都是按数组从小到大来说的。但题目要求要把成绩按从大到小排序。这个要注意。
    #include
    void main()
    {
    int a[15],b;
    int i,j,t;
    int min,mid,max;
    //输入15个学生的成绩
    for(i=0;i100)
    {
    printf("输入错误\n");
    i--;
    }
    }
    //选择法排序
    for(i=0;ia[mid])max=mid-1;
    else min=mid+1;
    }
    if(min==max)
    {
    printf("无此成绩\n");
    break;
    }
    }
    getch();
    }
    

    1***

    2006-10-26 11:58:22

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):