資料結構--氣泡排序和快速插入排序
阿新 • • 發佈:2019-01-01
- 題目:統計成績:給出n個學生的考試成績表,每條資訊由姓名和分陣列成,試設計一個演算法:(1)按分數高低次序,打印出每個學生在考試中獲得的名次,分數相同的為同一名次;(2)按名次列出每個學生的姓名與分數。
- 氣泡排序
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #define MAXSIZE 4 struct student{ char name[8]; int score; }stu[MAXSIZE]; int main() { int i,j,temp1,No=1; char temp2[MAXSIZE]; printf("請輸入學生的姓名與分數:\n"); for(i=0;i<MAXSIZE;i++) { printf("姓名:"); scanf("%s",stu[i].name); getchar(); printf("成績:"); scanf("%d",&stu[i].score); } for(i=0;i<MAXSIZE;i++) { for(j=0;j<MAXSIZE-i;j++) { if(stu[j].score<stu[j+1].score) { temp1=stu[j].score; stu[j].score=stu[j+1].score; stu[j+1].score=temp1; strcpy(temp2,stu[j].name); strcpy(stu[j].name,stu[j+1].name); strcpy(stu[j+1].name,temp2); } } } for(i=0;i<MAXSIZE;i++) { if(stu[i].score!=stu[i-1].score) No=i; else No=No; printf("第%d名:%s的成績為%d\n",No+1,stu[i].name,stu[i].score); } return 0; }
- 快速插入:
#include <stdio.h> #include <stdlib.h> #include<string.h> #define MAXSIZE 4 struct student{ char name[8]; int score; }stu[MAXSIZE]; int main() { int i,j,key,No=1; char temp[MAXSIZE]; printf("請輸入學生的姓名與分數:\n"); for(i=0;i<MAXSIZE;i++) { printf("姓名:"); scanf("%s",stu[i].name); getchar(); printf("成績:"); scanf("%d",&stu[i].score); } for(i=1;i<MAXSIZE;i++) { if(stu[i].score>stu[i-1].score) { key=stu[i].score; strcpy(temp,stu[i].name); stu[i].score=stu[i-1].score; strcpy(stu[i].name,stu[i-1].name); for(j=i-2;key<stu[j].score;j--) { stu[j+1].score=stu[j].score; strcpy(stu[j+1].name,stu[i].name); } stu[j+1].score=key; strcpy(stu[j+1].name,temp); } } for(i=0;i<MAXSIZE;i++) { if(stu[i].score!=stu[i-1].score) No=i; else No=No; printf("第%d名:%s的成績為%d\n",No+1,stu[i].name,stu[i].score); } }