-
2020-11-29 10:30:23
刚接触程序语言的时候,经常会用到一些排序的问题,按照算法运行效率和理解上面来看的话,有的时候我们可以记录一些比较便于理解的;
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内部的算法)
更多相关内容 -
学生成绩排序实例练习
2020-11-05 18:07:24学生成绩冒号排序,实例练习。 -
JAVA 输入学生成绩后总成绩排序输出
2018-04-06 22:50:35JAVA 输入学生成绩后总成绩排序输出,添加异常输入处理。 -
课程设计:学生成绩排序统计系统
2021-03-25 16:49:41课程设计:学生成绩排序统计系统学生成绩数据排序小程序 课程设计:学生成绩排序统计系统学生成绩数据排序小程序 -
输入学生成绩、名字和学号,实现按学生成绩总分排序的同时交换学号、成绩、姓名
2022-05-13 16:06:11实现学生成绩管理系统程序前的练习,输入学生名字、学号、和成绩,计算每个学生的平均分,总分,按总分从小到大排序,学号、名字、成绩也跟随总分排序
#include <stdio.h>
#include <string.h>
#define M 3
#define N 4
int main()
{
char num[M][20]={"101","102","103"},name[M][20]={"aaa","bbb","ccc"};
float score[M][N]={65,75,85,95,55,66,77,88,60,70,80,90};
float c[4];//交换成绩时作为中间变量
int i,j,k;
char str1[20];
float sum[M]={0},temp;//temp在判断总分大小中使用
float max[N],min[N];//四门课程中的最高分、最低分
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
sum[i]+=score[i][j];//计算每个学生的总分
}
}for(j=0;j<N;j++)//得到每门课程的最高分、最低分
{
max[j]=score[0][j];//每列的最高分
min[j]=score[0][j];//每列的最低分
for(i=0;i<M;i++)
{
if(score[i][j]>max[j])
max[j]=score[i][j];
if(score[i][j]<min[j])
min[j]=score[i][j];
}
}
for(i=0;i<M-1;i++) //i:0、1 //按总分排序,从小到大
{
for(k=i+1;k<M;k++)//k:1、2
{
if(sum[k]<sum[i])
{
temp=sum[i]; //按总分排序,换总分
sum[i]=sum[k];
sum[k]=temp;strcpy(str1, num[i]); //换学号
strcpy(num[i], num[k]);
strcpy(num[k], str1);strcpy(str1, name[i]); //换名字
strcpy(name[i],name[k]);
strcpy(name[k], str1);//strcpy(str2,(score[i])); //换成绩
//strcpy((score[i]),(score[j]));
//strcpy((score[j]), str2);
for(j=0;j<N;j++)
{
c[j] = score[i][j];//例如当i=0时,就是先将第一个同学四门课成绩赋值给一维数组c
score[i][j] = score[k][j];
score[k][j] = c[j];
}
}
}
}printf("所有学生的信息为:\n");
for (i=0;i<M;i++)
{
printf("%10s",num[i]);//输出学号
printf("%10s",name[i]);//输出名字
for (j=0;j<N;j++)
{
printf("%5.1f ",score[i][j]);//输出四门课的成绩
//printf("%5.1f ",float(score[i][j]));//输出四门课的成绩
}
printf("%.1f ",sum[i]);//输出每个学生成绩的总分
printf("%.2f",sum[i]/N);//输出每个学生成绩的平均分
printf("\n");
}printf("\t最高分 ");
for(j=0;j<N;j++)
printf("%.1f ",max[j]);
putchar('\n');
printf("\t最低分 ");
for(j=0;j<N;j++)
printf("%.1f ",min[j]);
putchar('\n');
return 0;
} -
学生成绩排序、按照各单科成绩排序、总分排序
2010-04-25 16:25:03学生成绩管理C++。按照各单科成绩排序、总分排序。 -
C++用类对学生成绩排序
2021-12-07 09:34:51#include <iostream> #include <iomanip> using namespace std; class Student { public: Student(string a, int b, int c, int d) { name = a; id = b; score = c; score_c = d;... a...#include <iostream> #include <iomanip> using namespace std; class Student { public: Student(string a, int b, int c, int d) { name = a; id = b; score = c; score_c = d; } Student(const Student& a) { name = a.name; id = a.id; score = a.score; score_c = a.score_c; } string name; int id, score_c, score; void Disp() { cout << setw(10) << name << setw(10) << id <<setw(10) << score << setw(10) << score_c << endl; } private: }; void SortStud(Student stud[], int n) { int i, j; Student t("张三", 2019001, 60, 78); for (j = 0; j < n-1; j++) { for (i = 0; i < n-1-j; i++) { if (stud[i].score < stud[i + 1].score) { t = stud[i+1]; stud[i+1] = stud[i]; stud[i] = t; } } } } int main() { Student stud[5] = { Student("张三", 2019001, 60, 78), Student("李四", 2019002, 89, 76), Student("王五", 2019003, 67, 99), Student("赵亮", 2019004, 89, 90), Student("高浩", 2019005, 100, 80) }; cout << "排序前" << endl; cout <<setw(10)<< "姓名" << setw(10) << "学号" << setw(10) << "数学成绩" << setw(10) << "C++成绩" << endl; cout << "-------------------------------------------" << endl; int i; for (i = 0; i < 5; i++) stud[i].Disp(); SortStud(stud, 5); //排序 cout << endl << "排序后" << endl; cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10) << "数学成绩" << setw(10) << "C++成绩" << endl; cout << "-------------------------------------------" << endl; for (i = 0; i < 5; i++) stud[i].Disp(); return 0; }
-
用java编一个学生成绩排序成绩 有学生的姓名 学号 三门课的成绩 然后对总分 ...
2021-02-26 10:45:39用java编一个学生成绩排序成绩 有学生的姓名 学号 三门课的成绩 然后对总分排序import java.util.*;public class student{class Node{public String name ;public String ID;public int java ;public int os;public ...用java编一个学生成绩排序成绩 有学生的姓名 学号 三门课的成绩 然后对总分排序
import java.util.*;
public class student
{
class Node
{
public String name ;
public String ID;
public int java ;
public int os;
public int PE;
public int total;
}
public Node data;
public student next;
public student creat()
{
student head,p,r,s1;
int x1,x2,x3,x4;
String n,i;
head=r=null;
System.out.print("请输入学生的姓名 学号 java成绩 os成绩 Internet 成绩");
System.out.print("请输入一个x整形数据以0结束:");
Scanner c= new Scanner(System.in);
n=c.nextLine();
Scanner c0= new Scanner(System.in);
i=c0.nextLine();
Scanner c1= new Scanner(System.in);
x1=c1.nextInt();
Scanner c2= new Scanner(System.in);
x2=c2.nextInt();
Scanner c3= new Scanner(System.in);
x3=c3.nextInt();
while (x1!=0)
{
student s11=new student();
s11.data.name=n;
s11.data.ID=i;
s11.data.java=x1;
s11.data.os=x2;
s11.data.PE=x3;
s11.data.total=s11.data.java+s11.data.os+s11.data.PE;
if(head==null)
head=s11;
else
r.next=s11;
r=s11;
Scanner b= new Scanner(System.in);
n=b.nextLine();
Scanner b0= new Scanner(System.in);
i=b0.nextLine();
Scanner b1= new Scanner(System.in);
x1=b1.nextInt();
Scanner b2= new Scanner(System.in);
x2=b2.nextInt();
Scanner b3= new Scanner(System.in);
x3=b3.nextInt();
}
if(r!=null)
r.next=null;
return head;
}
public void out(student head)
{
student p;
p=head;
System.out.print("List is:");
while(p!=null)
{
System.out.println("\t"+p.data.name+"\t"+p.data.ID+"\t"+p.data.java+"\t"+p.data.os+"\t"+p.data.PE+"\t"+p.data.total);
p=p.next;
}
}
public student sortup(student head)
{
student p=head,pre=null,s=null,q=null;
head.next=null;
while(p!=null)
{
s=p;
p=p.next;
pre=head;
q=head.next;
while(q!=null && q.data.total
{
pre=q;
q=q.next;
}
s.next=q;
pre.next=s;
}
return head;
}
public student sortdown(student head)
{
student p=head,pre=null,s=null,q=null;
head.next=null;
while(p!=null)
{
s=p;
p=p.next;
pre=head;
q=head.next;
while(q!=null && q.data.total
{
pre=q;
q=q.next;
}
s.next=q;
pre.next=s;
}
return head;
}
public static void main(String[] args) {
student x,y;
student a=new student();
x=a.creat();
a.out(x);
a.sortdown(x);
a.out(x);
a.sortup(x);
a.out(x);
}
}
我是一个java初学者 我们老师布置了一个实验 用java编一个学生成绩管理的一个小程序 (学生人数为10人)
要求:输入姓名 学号 三门课的成绩 计算总成绩 然后对这10个学生的总成绩排序 我编了一个但是行不通 我是按c语言 链表的思想来用java做的 不知道那出了问题 求各位大侠不胜赐教 帮我把它该对 谢谢 !小女子不胜感激 !!! 4.30之前就要交 希望大侠们.。。。----------------解决方案--------------------------------------------------------
程序代码:
/**定义一个学生的实体类*/
public class Student {
private String name;
private String ID;
private int java = 0;
private int os = 0;
private int PE = 0;
private int total = 0;
public Student() {
}
public Student(String name,String ID,int java, int os, int PE) {
this.name = name;
this.ID = ID;
this.java = java;
this.os = os;
this.PE = PE;
this.total = java + os + PE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getOs() {
return os;
}
public void setOs(int os) {
this.os = os;
}
public int getPE() {
return PE;
}
public void setPE(int pE) {
PE = pE;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void out(){
System.out.println("\t"+this.getJava()+"\t"+this.getOs()+"\t"+this.getPE()+"\t"+this.getTotal());
}
}
--- 下面是 运行方法 ----
public static void main(String[] args) {
/**ArrayList需要通过collections类的sort方法来进行排序
如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法
调用sort方法时将ArrayList对象与实现Commparator接口的类的对象作为参数**/
Comparator comparator = new Comparator() {
public int compare(Student s1, Student s2) {
return s2.getTotal()-s1.getTotal() ;
//s2.getTotal()-s1.getTotal()倒序//s1.getTotal()-s2.getTotal()顺序
}
};
ArrayList list = new ArrayList();
for (int i = 0; i <= 2; i++) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入学生的姓名 学号 java成绩 os成绩 Internet 成绩");
Student s = new Student(scan.next(),scan.next(),scan.nextInt(), scan.nextInt(),
scan.nextInt());
list.add(s);
}
Collections.sort(list,comparator);
for (Student stu : list) {
stu.out();
}
}
----------------解决方案--------------------------------------------------------
谢谢
----------------解决方案--------------------------------------------------------
非常感谢你给我的解答 有些地方我看不怎么懂 再次向你请教
为什么每一个Student的类的每一个属性都有 return xx ,this.xx=xx 呢?是什么含义
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
----------------解决方案--------------------------------------------------------
这个是实体类属性的set和get方法!设置值用set获取值用get。
----------------解决方案--------------------------------------------------------
我定义的属性是private
只能提供一个外部的获取方法才能 获取和修改
----------------解决方案--------------------------------------------------------
楼上的小程序写的合理,就是此程序不需要它的set get方法,没有涉及到实体注入,同时建议初学者将实体类和主方法分开写,逐渐培养良好的封装思想
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
厉害,没想到用这个
Comparator comparator = new Comparator() {
public int compare(Student s1, Student s2) {
return s2.getTotal()-s1.getTotal() ;
//s2.getTotal()-s1.getTotal()倒序 //s1.getTotal()-s2.getTotal()顺序
}
};
----------------解决方案--------------------------------------------------------
-
小实例-实现对成绩总分由高到低的排序-Java中数组对象的排序
2021-04-23 20:32:51//如何实现这对象数组排序import java.util.Arrays;public class SortTotalScore{public static void main(String args[]){Student[] st = new Student[10];st[0] = new Student("三年二班", "老大",93,84,54,45,89,... -
学生管理系统录入学生成绩并进行排序
2021-05-11 15:43:03在写学生成绩分析时,会给学生一个排名,但一般成绩录入时,都是无序的,如果我们用链表存储信息,那么构造的数据结构中肯定还有其他的信息,如姓名,学号等,所以我们得根据成绩进行链表节点的交换。 1. 从文件中... -
Java基础——学生成绩信息排序(TreeSet)
2021-11-23 17:17:33需求:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。 * 步骤: * a: 自定义一个学生类 * b: 创建一个TreeSet集合对象(使用比较器进行排序) * c: 键盘录入学生的... -
通过c++的sort函数实现成绩排序功能
2020-08-25 00:05:50主要介绍了通过c++的sort函数实现成绩排序,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
巧用python对学生成绩计算总分并排序
2020-11-22 16:53:26在一个文本文件中存放着学生的各科成绩,现在需要计算各门课的成绩总分,并进行排序。这个应该怎么做呢?让我们试着编写这样的一个小程序。工具/原料python3.7方法/步骤1第一步,读入文件。由于这个文件并不大,我们... -
使用excel为学生成绩排序的方法和步骤
2021-06-24 02:21:18当然我也看到或听说过其他学校的学生成绩统计分数排名表。它是对学生成绩进行升序或降序的排列表。这在excel中是比较简单的。这种排序表的好处是前几名"优生"和后几名"差生"一目了然。真正起到了"鼓励"和"鞭策"的... -
C++学生类和成绩排序
2019-05-28 20:31:37程序最终输出界面是三个部分,1、录入学生成绩,2、查找学生成绩,3、显示全部学生成绩;首先定义一个学生类,将所有的成员信息放入私有数据,再构造函数默认赋值。处理对象,写出所需要的录入学生成绩信息,姓名、... -
C语言学生成绩统计程序(排序版)
2019-12-11 14:29:12printf("\t* 输入学生成绩-------------1 *\n"); printf("\t* 求学生总分并输出---------2 *\n"); printf("\t* 将学生总成绩排序并输出---3 *\n"); printf("\t* 退出系统-----------------0 *\n"); printf... -
数据结构实验入门:学生成绩统计排序系统
2021-09-09 22:01:10设计程序实现统计一个班的学生成绩(学生的人数可以设置3000、5000、8000、10000等测试数据),要求自行设计至少两种排序算法,实现如下四个功能;记录每种算法的耗时,结合数据结构的知识对两种算法的时间复杂度... -
学生成绩管理系统
2018-10-11 13:07:34题目: 学生成绩管理系统 1 功能描述 设某班有n位同学,每位同学的数据包括以下内容:学号(字符串)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据... -
C语言课程设计——学生成绩管理系统(源代码+详细注释).zip
2021-10-01 16:34:42/*排序学生记录*/ case 8:Save(l);break; /*保存学生记录*/ case 9:system("cls");Disp(l);break; /*显示学生记录*/ default: Wrong();getchar();break; /*按键有误,必须为数值0-9*/ }等等~~~~~~~~~~~ 以上... -
cpp: 学生成绩排序,计算平均分
2017-11-26 13:16:42下面是一个简单是统计几个学生成绩的小案例。如果使用 java这样的纯面向对象的语言,非常简单;如果使用c就比较麻烦了,需要去处理字符串,结构这些东西;如果是c++呢?相对来说,还是比较简单。当然,这是一个简单... -
用java编一个学生成绩排序成绩 有学生的姓名 学号 三门课的成绩 然后对总分排序
2021-03-10 02:34:29已结贴√问题点数:50回复次数:8 用java编一个学生成绩排序成绩 有学生的姓名 学号 三门课的成绩 然后对总分排序import java.util.*;public class student{class Node{public String name ;public String ID;public... -
学生成绩排序
2019-10-29 14:42:47某班有不超过200名的学生,从文件中输入某班学生成绩,对输入成绩按由高到低进行排序,并输出到另一个文件中。 -
java实现简单学生单科成绩高低排序代码
2022-01-28 18:36:43package day; import java.util.Scanner; public class student { public static void main(String[] args) { ... System.out.println("请输入学生的人数"); int arr=s.nextInt(); int sum=0; int []ar. -
学生成绩排序与平均分计算利用c语言链表创建插入删除.doc
2021-05-20 01:44:05学生成绩排序与平均分计算利用c语言链表创建插入删除#include#include#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n;struct student *creat... -
学生成绩排序——选择法排序
2021-12-04 19:04:01将N个学生的成绩从高到底排序 分析: (1)从N个数的序列中选出最大的数,与第1个数交换位置; (2)除第1个数外,其余N-1个数再按(1)的方法选出次大的数,与第2个数交换位置; (3)重复_上述过程共N-1遍,最后构成递减序列 ... -
JAVA有关学生成绩排序的问题
2021-02-26 10:45:45题目要求:定义一个Student数组,其中保存学生的基本信息,包括姓名、学号、性别,还分别保存三门功课的成绩以及对应学分,试编程计算这三门课的学分积,并按学分积降幂排序,输出排序...题目要求:定义一个Student... -
C程序问题:输入10个学生每人5门课的成绩,利用函数计算每个学生总成绩,并对10个学生总成绩排序
2021-05-19 18:17:32满意答案 zhongxuehua ... printf("排序十个学生的总成绩为:"); for(i=0;i;i++) { for(j=i+1;j;j++) { if(b[i] { c=b[i]; b[i]=b[j]; b[j]=c; } } } for(i=0;i;i++) printf("%8.2f\n",b[i]); return 0; } 00分享举报 -
java学生成绩管理系统.zip
2021-07-08 19:52:37java编写的学生成绩管理系统,GUI界面,实现了增删改查、保存和根据总分排序,根据某个科目排序的功能,详情请看我的博客 https://blog.csdn.net/qq_52889967/article/details/118581246 -
C/C++学生成绩管理系统
2021-12-24 12:25:19选题3学生成绩管理一、设计要求由于同学们已经学习了指针、链表、文件读写等基本知识,为了与后续课程, 如数据结构、数据库系统等有一个知识体系上的衔接,特设置一个信息管理类的课题《成绩管理系统》, 其它诸如...