冒泡排序的原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
for (int a = 0; a < length - 1; a++) {
            for (int b = 0; b < length - 1 - a; b++) {
                if (input[b] > input[b+1]) {
                    tmp = input[b+1];
                    input[b+1] = input[b];
                    input[b] = tmp;
                }
            }
}示例程序
//
//  main.c
//  冒泡排序(数组)
//
//  Created by Jacky on 2020/3/15.
//  Copyright © 2020 Jacky. All rights reserved.
//
/*
 题目描述
 输入n个数字,使用冒泡排序对其进行升序排序。
 
 输入
 测试次数T
 
 每组测试数据格式为:数字个数n,后跟n个数字。假设n<20。
 
 输出
 对每组测试数据,输出冒泡排序的每趟排序结果
 
 样例输入
 2
 5 10 4 43 1 2
 10 20 123 12 2 434 54 2 45 23 -10
 样例输出
 4 10 1 2 43
 4 1 2 10 43
 1 2 4 10 43
 1 2 4 10 43
 20 12 2 123 54 2 45 23 -10 434
 12 2 20 54 2 45 23 -10 123 434
 2 12 20 2 45 23 -10 54 123 434
 2 12 2 20 23 -10 45 54 123 434
 2 2 12 20 -10 23 45 54 123 434
 2 2 12 -10 20 23 45 54 123 434
 2 2 -10 12 20 23 45 54 123 434
 2 -10 2 12 20 23 45 54 123 434
 -10 2 2 12 20 23 45 54 123 434
 */
#include <stdio.h>
void printArray(int array[], int length);
int main() {
    int t, input[20], length, tmp;
    scanf("%d", &t);
    for (int i = 0; i < t; i++) {
        scanf("%d", &length);
        for (int j = 0; j < length; j++) {
            scanf("%d", input + j);
        }
        
        for (int a = 0; a < length - 1; a++) {
            for (int b = 0; b < length - 1 - a; b++) {
                if (input[b] > input[b+1]) {
                    tmp = input[b+1];
                    input[b+1] = input[b];
                    input[b] = tmp;
                }
            }
            printArray(input, length);
        }
    }
    return 0;
}
void printArray(int array[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
}
文章最后修订于 2020年8月31日
 
 
 
 
学到了 感谢大佬😘
@老板来罐冰阔落: 军er