冒泡排序
基本思想:
从第一个数开始,不断比较两个相邻的数,如第1个和第2个比较,第2个和第3个比较,依次比,直到比完第一轮选出了最大的数;
第二轮则选出第二大的数,最多进行n-1轮比较。
代码:
void bubble_sort(int a[], int m) { for (int i = 0; i < m - 1; i++) { int flag = 1; for (int j = 0; j < m - 1 - i; j++) {//注意j的最大值,因为第一轮选出了最大的数,所以每比较一轮,j的最大值都-1 if (a[j] > a[j + 1]) { flag = 0; int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } if (flag) { break; } } for (int i = 0; i < m; i++) cout << a[i] << " "; cout << endl; }
例子:
【输入形式】
第一行,输入一个整数t(1 ≤ t ≤ 10);将需要做t组计算。
每组由两行数据组成,每组的第一行输入一个整数n表示待排序的数字的个数(1 ≤ n ≤ 1001),每组的第二行有n个由空格分隔开的数字。
【输出形式】每组测试样例输出一行该组按照从小到大排序后的数列,相邻数字间用一个空格分隔开。
【样例输入】
2
3
3 2 5
6
1 2 3 4 7 5
【样例输出】
2 3 5
1 2 3 4 5 7
实现代码:
#include <iostream> using namespace std; void bubble_sort(int a[], int m) { for (int i = 0; i < m - 1; i++) { int flag = 1; for (int j = 0; j < m - 1 - i; j++) {//注意j的最大值,因为第一轮选出了最大的数,所以每比较一轮,j的最大值都-1 if (a[j] > a[j + 1]) { flag = 0; int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } if (flag) { break; } } for (int i = 0; i < m; i++) cout << a[i] << " "; cout << endl; } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { int m, a[1001]; cin >> m; for (int j = 0; j < m; j++) cin >> a[j]; bubble_sort(a, m); } }