1. 程式人生 > >資料結構--氣泡排序和快速插入排序

資料結構--氣泡排序和快速插入排序

  • 題目:統計成績:給出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);
    }
}