实验目的
- 深刻理解各种排序算法的设计思想;
- 掌握各种排序算法的执行过程;
- 掌握各种排序算法的设计实现
实验内容
一个班有n个学生,每个学生有学号(no)、姓名(name)、年龄(age)、成绩(score)。
- 定义数据结构来描述学生信息。
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.}