查找排序实验报告

时间:2024.4.20

查找、排序实验

班级     学号   姓名   

一、实验目的

    1 掌握不同的查找和排序方法,并能用高级语言实现相应算法。

2 熟练掌握顺序查找和二分查找方法。

3 熟练掌握直接插入排序、选择排序、冒泡排序、快速排序。

二、实验内容

1 创建给定的静态查找表。表中共包含十条学生信息,信息如下:

  学号   姓名    班级     C++    数据结构

  1      王立    03511    85      76

  2      张秋    03511    78      88

  3      刘丽    03511    90      79

  4      王通    03511    75      86

  5      赵阳    03511    60      71

  6      李艳    03511    58      68

  7      钱娜    03511    95      89

  8      孙胜    03511    45      60

2 使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

3使用快速排序方法,对学生信息中的学号进行排序,然后使用二分查找方法,从查找表中查找学号为7和12的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

4 使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。

5 使用选择排序方法,对学生信息中的C成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。

6 使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。

7 编写一个主函数,将上面函数连在一起,构成一个完整程序。

8 调试实验源程序并运行。

三、实验结果

源程序代码:


#include <iostream>

using namespace std;

#include <string>

#include <iomanip>

#define M 100

typedef string Keytype;

typedef struct

{

   Keytype classNum;

   Keytype name;

   int studentNum;

   int C;

   int structure;

}Student;

typedef struct

{

       Student s[M];

       int length;

}s_t;

int creat(s_t *t,int Num)

{

       int i;

      

       t->length=Num;

       for(i=1;i<=t->length;i++)

       {

              cout<<"请输入第"<<i<<"个学生的信息(学号,姓名,班级,C++,数据结构):"<<endl;

              cin>>t->s[i].studentNum>>t->s[i].name>>t->s[i].classNum>>t->s[i].C>>t->s[i].structure;

       }

       return 0;

}

int print(s_t *t)

{

       int i; 

       cout<<"   "<<"学号"<<"   "<<"姓名"<<"  "<<"班级"<<"    "<<"C++成绩"<<"   "<<"数据结构"<<"  "<<endl;

       for(i=1;i<=t->length;i++)

       {

    cout<<"   "<<t->s[i].studentNum<<"     "<<t->s[i].name<<"      "<<t->s[i].classNum<<"     "<<t->s[i].C<<"      "<<t->s[i].structure<<"    "<<endl;

       }

   return 0;

}

int S_Search(s_t *t,Keytype kx)

{

    int i;

       t->s[0].name=kx;

       for(i=t->length;i>=0;i--)

              if(t->s[i].name==kx)

              return i;

}

void InserSort(s_t *t)

{

    int i;

       for(i=2;i<=t->length;i++)

              if(t->s[i].name<t->s[i-1].name)

              {

            t->s[0]=t->s[i];

                     for(int j=i-1;t->s[0].name<t->s[j].name;j--)

                  t->s[j+1]=t->s[j];

            t->s[j+1]=t->s[0];

              } 

}

int Select_Sort(s_t *t)

{

       int i,j,k;

       for(i=0;i<t->length;i++)

       {

              k=i;

        for(j=i+1;j<=t->length;j++)

                     if(t->s[k].C>t->s[j].C)

                            k=j;

              if(i!=k)

              {

            t->s[0]=t->s[k];

                     t->s[k]=t->s[i];

                     t->s[i]=t->s[0];

              }

       }

       return 0;

}

int Half_Sort(s_t *t,int num)

{

       int flag=0;

       int low,high,mid;

       low=1;

    high=t->length;

    while(low<=high)

       {

          mid=(low+high)/2;

          if(t->s[mid].studentNum>num)

                 high=mid-1;

       else if(t->s[mid].studentNum<num)

                 low=mid+1;

          else

          {

          flag=mid;

          break;

          }

     }

       return flag;

}

int Bu_Sort(s_t *t)

{

       int i,j,swap;

    for(i=1;i<t->length;i++)

       {

              swap=0;

        for(j=1;j<=t->length-i;j++)

                     if(t->s[j].structure>t->s[j+1].structure)

                     {

                             t->s[0]=t->s[j];

                          t->s[j]=t->s[j+1];

                       t->s[j+1]=t->s[0];

                             swap=1;

                     }

              if(swap==0)

                     break;

       }

       return 0;

}

int Partition(s_t *t,int i,int j)

{

  t->s[0]=t->s[i];

  while(i<j)

  {

    while(i<j&&t->s[j].studentNum>=t->s[0].studentNum)

              j--;

       if(i<j)

       {

         t->s[i]=t->s[j];

         i++;

       }

       while (i<j&&t->s[i].studentNum<t->s[0].studentNum)

              i++;

       if(i<j)

       {

         t->s[j]=t->s[i];

       j--;

       }

  }

  t->s[i]=t->s[0];

  return i;

}

void Quick_sort(s_t *t,int s,int p)

{

       int i;

  if(s<p)

  {

    i=Partition(t,s,p);

       Quick_sort(t,s,i-1);

       Quick_sort(t,i+1,p);

  }

}

void Quick(s_t *t,int n)

{

  Quick_sort(t,1,n);

}

int main()

{

       s_t *t;

       int i,n,n1,Num;

       int flag=1;

       Keytype kx;

       t=new s_t;

       cout<<"              *********欢迎进入学生管理系统**************  "<<endl;

       cout<<"     1 按姓名顺序查找    2 输出所有学生信息  3 直接插入排序"<<endl;

       cout<<"     4 按C++选择排序     5 按学号二分查找    6 按数据结构冒泡排序  "<<endl;

       cout<<"     7 按学号快速排序    8 建立学生的信息    0 退出程序   "<<endl;

       cout<<"              ******************************************** "<<endl;

       while(flag)

       {

              cout<<"请选择要进行的操作:";

              cin>>n;

              switch(n)

              {

              case 1:    

                         cout<<"请输入要查找的学生的姓名:"<<endl;

                            cin>>kx;

                         i=S_Search(t,kx);

                if(i)

                            {

                     cout<<"   "<<"学号"<<"  "<<"姓名"<<"  "<<"班级"<<"  "<<"C++成绩"<<"  "<<"数据结构"<<"  "<<endl;

                cout<<"   "<<t->s[i].studentNum<<"     "<<t->s[i].name<<"    "<<t->s[i].classNum<<"       "<<t->s[i].C<<"        "<<t->s[i].structure<<"   "<<endl;

                   cout<<endl;

                            }

                   else cout<<"没有此人!"<<endl;

                            break;

              case 2: 

                         cout<<"输出现在学生的全部信息:"<<endl;

                         print(t);

                            break;

              case 3:cout<<"直接插入排序:"<<endl;

               cout<<"排序前的学生信息"<<endl;

                        print(t);

                        cout<<"排序后的学生信息"<<endl;

                        InserSort(t);

                        print(t);

                        break;

              case 4:cout<<"选择排序:"<<endl;

               cout<<"排序前的学生信息"<<endl;

                        print(t);

                        Select_Sort(t);

                     cout<<"排序后的学生信息"<<endl;

               print(t);

                        break;

              case 5:Select_Sort(t);

                        cout<<"输入要查找的学号"<<endl;

                        cin>>n1;

                        i=Half_Sort(t,n1);

                        if(i)

                            {

                     cout<<"   "<<"学号"<<"    "<<"姓名"<<"    "<<"班级"<<"    "<<"C++成绩"<<"     "<<"数据结构"<<"    "<<endl;

                cout<<"    "<<t->s[i].studentNum<<"    "<<t->s[i].name<<"    "<<t->s[i].classNum<<"    "<<t->s[i].C<<"    "<<t->s[i].structure<<"   "<<endl;

                   cout<<endl;

                            }

                         else cout<<"不存在此学号!"<<endl;

                        break;

              case 6:cout<<"冒泡排序"<<endl;             

                        cout<<"排序前的学生信息"<<endl;

                        print(t);

                        Bu_Sort(t);

                     cout<<"排序后的学生信息"<<endl;

                        print(t);

                        break;

              case 7:

                        cout<<""<<endl;

                        print(t);

                        cout<<""<<endl;

                        Quick(t ,Num);

               print(t);

                        break;

        case 8:

                     cout<<"请输入学生的个数:";

               cin>>Num;

                     creat(t,Num);

                     break;

              case 0: return 0;

              default:cout<<"没有此功能,请选择正确的操作!"<<endl;break;

        }

       }

       return 0;

}


运行结果:

表1  输入学生信息

表2 顺序查找方法

表3 按姓名直接插入

表4 按C成绩选择排序

                                                   

表5 按学号进行二分法查找

表6 按数据结构成绩进行冒泡法排序

四、实验总结

(1)直接插入排序时,要明确后移的结束条件,以便进行正确插入。

(2)选择排序时,选择最小或是最大的数据,放到最后。进行N-1趟排序,排序完成。

(3)二分法排序时,正确返回查找的下标。返回值flag要进行赋初值,以便返回时,正确输出查找结果。

(4)冒泡排序时,用swap进行排序的标志。节省排序的趟数。

北 华 航 天 工 业 学 院

《数据结构》

课程实验报告

实 验 题 目 :     查找、排序实验   

作者所在系部:     计算机科学与工程系 

作者所在专业:     网络工程           

作者所在班级:                  

作 者 学 号 :           

作 者 姓 名 :                 

任课教师姓名:                

完 成 时 间 :     2010/12/28         

北华航天工业学院教务处制

更多相关推荐:
内部排序实验报告

深圳大学实验报告课程名称学院报告人实验时间实验报告提交时间教务部制深圳大学学生实验报告用纸2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

数据结构排序实验报告

数据结构课程设计报告实验五排序一需求分析本演示程序用C60编写完成各种排序的实现对输入的一组数字实现不同的排序方法对其由小到大顺序输出1分别对直接插入排序希尔排序冒泡排序快速排序选择排序堆排序算法进行编写2对存...

实验报告-各种排序方法及其实现

计算机学院实验报告专用纸实验室网络实验室机号网38实验日期20xx年6月25日1计算机学院实验报告附页2计算机学院实验报告附页3计算机学院实验报告附页4计算机学院实验报告附页5计算机学院实验报告附页6计算机学院...

实验报告_排序与查找

电子科技大学信息与软件工程学院实验报告电子科技大学实验报告课程名称学生姓名学号点名序号指导教师实验地点实验时间20xx20xx2学期信息与软件工程学院第1页电子科技大学信息与软件工程学院实验报告实验报告二学生姓...

排序算法实验报告

实验课程算法分析与设计实验名称几种排序算法的平均性能比较验证型实验实验目标1几种排序算法在平均情况下哪一个更快2加深对时间复杂度概念的理解实验任务1实现几种排序算法selectionsortinsertions...

各种排序实验报告

一需求分析课程题目是排序算法的实现课程设计一共要设计八种排序算法这八种算法共包括堆排序归并排序希尔排序冒泡排序快速排序基数排序折半插入排序直接插入排序为了运行时的方便将八种排序方法进行编号其中1为堆排序2为归并...

数据结构排序算法实验报告

《数据结构》课程设计报告

排序算法设计和比较实验报告

数据结构实验报告五专业自动化学号0901071002日期20xx1215班级0710姓名程序排序算法设计比较实验五排序算法设计和比较实验内容与要求问题描述利用直接插入排序冒泡排序快速排序对数列进行排序基本要求1...

排序C语言实验报告

排序数学系李一鹏PB120xx076第五组1试验题目排序2实验目的掌握各种内部排序思想3实验内容每一个在令狐冲身边出现的女性都会在令狐冲心中占有一定地位例如小师妹的地位值是23456任盈盈的地位值是30000东...

内部排序比较 (实验报告+源程序)C++

实验报告3实验名称数据结构与软件设计实习题目内部排序算法比较专业生物信息学班级01姓名学号实验日期20xx0724一实验目的比较冒泡排序直接插入排序简单选择排序快速排序希尔排序二实验要求待排序长度不小于100数...

实验五 查找和排序实验报告

实验五查找和排序1实验目的1掌握顺序查找的基本方法2掌握简单排序和二分法查找的算法2能运用线性表的查找方法解决实际问题2实验内容1给出在一个无序表A采用顺序查找算法查找值为x的元素的算法2给出一个无序表B采用简...

排序算法比较实验报告

信息学部算法分析上机报告学号姓名指导老师时间090107021101秦明一上机实验题目实验1比较归并排序和快速排序的区别实验2利用贪心算法对背包问题进行求解二算法设计思路归并排序申请空间使其大小为两个已经排序序...

排序实验报告(33篇)