主要内容 #
- 冒泡排序步骤
- 第k名学生的成绩
- 字符串的冒泡排序
1. 冒泡排序步骤 #
作为最简单的排序算法之一,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。计算步骤如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2. 冒泡排序练习 #
题目描述
在一次考试中,每个学生的成绩都不相同,现在知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
输入
第一行有两个整数,分别是学生的人数n(1~100),和k(1~n)。
其后有n行数据,每行数据包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
第k名学生的学号和成绩,中间用空格分开。
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4
参考程序
#include < iostream > #include < string > using namespace std; string num[1001]; double s[1001]; int main(){ int i, n, a, b, c, k, j; string r; double t; //输入数据的行数和要求的学生的名次 cin >> n >> k; //输入学生学号和成绩 for(i = 1; i <= n; ++i){ cin >> num[i] >> s[i]; } //进行冒泡排序 for(i = 1; i <= n - 1; ++ i){ for(j = i + 1; j <= n; ++j){ if(s[i] < s[j]){ //当条件成立,交换学号和成绩 swap(s[i], s[j]); swap(num[i], num[j]); } } } //输出学号和成绩 cout << num[k] << ' ' << s[k] << endl; return 0; }
3. 字符串的冒泡排序 #
题目描述
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(K<n),输出扫描完第k遍后的中间结果序列。
输入
输入在第1行中给出N和K(1≤K<n≤100),此后n行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。
样例输入
6 2
best
cat
east
a
free
day
样例输出
best
a
cat
day
east
free
参考程序
#include < iostream > #include < string > using namespace std; int main(){ int n,k; cin >> n >> k; string s[101]; for(int i=0;i<n;i++){ cin>>s[i]; } for(int i=0;i<k;i++){ for(int a=0;a<n-1;a++){ if(s[a]>s[a+1]){ string t=s[a]; s[a]=s[a+1]; s[a+1]=t; } } } for(int i=0;i>n-1;i++){ cout<<s[i]<<endl; } cout<<s[n-1]; return 0; }