zoukankan      html  css  js  c++  java
  • 学生成绩排序基础算法笔记

         刚接触程序语言的时候,经常会用到一些排序的问题,按照算法运行效率和理解上面来看的话,有的时候我们可以记录一些比较便于理解的;

    1:如果一个班有5个同学考试成绩如下,需要我们通过程序的方式来对成绩从高到低来排序,学生成绩如下:

    88,52,67,93,87(各个同学的成绩不相等

    方法一:

    list = [88,52,67,93,87]    #将这5个学生的成绩存入列表或者数组
    rank = [1,1,1,1,1]           #新设置一个列表(数组)用于存放list列表中各个元素的排位情况(长度需要跟list一致),这个地方之所以把每个元素设置为1,程序中可以理解
    new=[0,0,0,0,0]             #定义一个新的列表(数组),用于存放排序后的成绩


    for j in range(0,5):         #此处用python的语法,用C语言可以是  for(j=0,j<5,j++),此循环设置的目的是用于遍历list列表(数组)
      sm = list[j]              #将列表(数组)中第一个值赋值给 sm,暂存list元素的值,用于设定后面的值来跟本值的比较,从list第一个元素(88)开始---87结束
      for m in list:            #再设定一个循环来提取list的每个元素与刚才暂存的sm来比较
        if m > sm:        
        rank[j]=rank[j]+1    #此处是比较关键的,当后面提取出来list元素的值比暂存的sm的值大的时候,rank[j]对应的值就加1;这里要说明一下,比如提取的是“93”,因为93比

                #88的值要大,所以按照排序的位置,93就要排到88的前面,如果93排的是“1”号位置,那么88通过本次比较就往后移动1位;因本来我们设定的rank里                                               #面各元素的值都是1,于是当我们把里面的值“+1”的次数统计出来后,自然就记录好了这个数在整个数列中应该排的位置。

    print(rank)                     #于是得出的rank的结果是:[2,5,4,1,3]  ,证明,list中的各个数据对应的排序位置应该是2,5,4,1,3            

    for n in range(0,5):               #再次设置一个5次循环,用于遍历list
      new[rank[n]-1]=list[n]    #分别把list当前的值替换新列表中排位中的数据,比如88应该排第二位,那就替换新列表中2号位置的数据,new[1](rank[n]-1 列表和数组位置从0开始                                                 #的,所以此处记得“-1”)
    print(new)      #执行后结果:[93, 88, 87, 67, 52]

    分析:如果按照冒泡排序的方式,就是每次比较2个数字,譬如A,B,C,D,E,步骤:1,A与B比较,如果A大  2,拿A去跟C比较,如果A比C大  3,A跟D比较,如果A比D大。4,A与E比较。那么问题来了,A是比较出来了,是最大的,关键是B,C,D,E之间还得重新比较一下又要重新交换位置,尤其是数据多了以后,程序就不太便于理解;而设置一个跟原数组同长度的数组后,就便于理解和记录每个元素应该排放的位置了;当然这是个例子,本题数据是不相同的,那么数据相同了的话,要做多两层判断了,留下供思考;

    方法二:因python中有自带的一些实用的函数,处理起来就非常的简便了

    list2=[93, 88, 87, 67, 52]

    list2.sort(reverse=True)

    print(list2)    #此时不管里面是否有相同分数的,都可以正常排序出来(只是我们没有研究sort内部的算法)

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/tinglele527/p/11653620.html
Copyright © 2011-2022 走看看