数据结构实验4:排序

实验目的

  1. 深刻理解各种排序算法的设计思想;
  2. 掌握各种排序算法的执行过程;
  3. 掌握各种排序算法的设计实现

实验内容
一个班有n个学生,每个学生有学号(no)、姓名(name)、年龄(age)、成绩(score)。

  1. 定义数据结构来描述学生信息。
    2.按成绩进行降序排列(自选两种排序算法)。
    3.输出每一趟排序的过程。
    4.输出已排序的学生数据;要求输出整齐。

分析
刚开始想用模板类的方法实现一个排序算法,只要给定存放对象的容器和比较对象的方法,就可以对存放任意对象容器进行排序,但是后来发现这样的做法远比想象中要复杂,最后用最简单的方法实现。构造一个学生类,
一个班级类,将排序的方法写到班级类里面,在学生类中通过运算符重载来定义比较不同学生信息的依据。实现了可以通过运算符比较两个学生对象,排序算法中就可以对他们作大小比较了,实现时代码只需小改,与普通的整数排序代码几乎一致。
本代码选择了一个快速排序算法和选择排序算法,每一趟排序输出学生数组的成绩排列变化.

MyCode

1.#include<iostream>  
2.#include<stdio.h>  
3.#include<string.h>  
4.#include<string>  
5.#include<vector>  
6.#include<algorithm>  
7.using namespace std;  
8.  
9.class Student{  
10.    string name;  
11.    string id;  
12.    int age;  
13.    int score;  
14.    string space(string t){  //帮助格式化输出
15.        string n = "                     ";  
16.        t += n.substr(0, 15 - t.length());  
17.        return t;  
18.    }  
19.public:  
20.    int get_score(){ return score; }  
21.    void getdata(){  
22.        cout << "Please input: name, id, age, score > ";  
23.        cin >> name >> id >> age >> score;  
24.    }  
25.    void printf(){  
26.        cout << "name:" << space(name);  
27.        cout << "id:" << space(id);  
28.        cout<< "age:" << age << "     score:" << score << endl;  
29.    }  
30.    bool operator > (const Student &t){  
31.        return score >= t.score;  
32.    }  
33.};  
34.  
35.class Group{  
36.    vector<Student>data;  
37.    void QuickSort(int lr, int rr){  
38.        if (lr < rr) {  
39.            int i, j;  
40.            Student x = data[lr];  
41.            i = lr;  
42.            j = rr;  
43.            while (i < j) {  
44.                while (i < j && !(data[j] > x)) j--;  
45.                if (i < j)  
46.                    data[i++] = data[j];  
47.                while (i < j && data[i] > x) i++;  
48.                if (i < j)  
49.                    data[j--] = data[i];  
50.            }  
51.            data[i] = x;  
52.            listscore();  
53.            QuickSort(lr, i - 1);  
54.            QuickSort(i + 1, rr);  
55.        }  
56.    }  
57.    void SelectSort(){  
58.        for (int i = 0; i<data.size(); i++){  
59.            int max_index = i;  
60.            for (int j = i + 1; j<data.size(); j++){  
61.                if (data[j] > data[max_index]){  
62.                    max_index = j;  
63.                }  
64.            }  
65.            if (max_index != i){  
66.                Student temp = data[i];  
67.                data[i] = data[max_index];  
68.                data[max_index] = temp;  
69.                listscore();  
70.            }  
71.        }  
72.    }  
73.public:  
74.    //获取输入数据  
75.    void init(){  
76.        cout << "Please input the sizeof input data : >";  
77.        int size; cin >> size;  
78.        data = vector<Student>(size);  
79.        for (int i = 0; i < size; i++) data[i].getdata();  
80.        cout << "Get data completed !" << endl;  
81.    }  
82.    //展示数据  
83.    void display(){  
84.        cout << "===================== data =====================\n";  
85.        for (int i = 0; i < data.size(); i++) data[i].printf();  
86.        cout << "================================================\n";  
87.    }  
88.    //显示学生的成绩  
89.    void listscore(){  
90.        //cout << "================= list of score ================\n";  
91.        for (int i = 0; i < data.size(); i++){  
92.            cout << data[i].get_score() << "  ";  
93.        }  
94.        cout << endl;  
95.    }  
96.    //测试快速排序功能  
97.    void qsort(){  
98.        display();  
99.        listscore();  
100.        QuickSort(0, data.size()-1);  
101.        display();  
102.    }  
103.    //测试选择排序功能  
104.    void ssort(){  
105.        display();  
106.        listscore();  
107.        SelectSort();  
108.        display();  
109.    }  
110.};  
111.  
112.int main(){  
113.    Group group;  
114.    group.init();  
115.    group.qsort();  
116.    //group.ssort();  
117.      
118.} 

在这里插入图片描述
在这里插入图片描述

发布了90 篇原创文章 · 获赞 31 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/BlackCarDriver/article/details/90377958