冒泡排序

基本思想:

       从第一个数开始,不断比较两个相邻的数,如第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);
    }
}

 

posted @ 2021-10-13 22:34  湘summer  阅读(42)  评论(0编辑  收藏  举报