冒泡排序(简单C++实现)

实现代码如下:

// bubble_sort.cpp
#include <stdio.h>

void printArray(int arr[], int len);

// 冒泡排序:最多进行n-1次排序
int main() {
    int arr[] = {23,39,65,28,5,3,34,75,21};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
    int temp;
    for (int i = 0; i < arrLen - 1; i++) {
        for (int j = 0; j < arrLen - i - 1; j++) {
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        printf("这是第%d次排序", i);
        printArray(arr,arrLen);
    }
    return 0;
}

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d,",arr[i]);
    }
    printf("\n");
}

这个代码的时间复杂度为O(n2)
运算结果为

C:\1\C++\bubble_sort\cmake-build-debug\bubble_sort.exe
这是第0次排序23,39,28,5,3,34,65,21,75,
这是第1次排序23,28,5,3,34,39,21,65,75,
这是第2次排序23,5,3,28,34,21,39,65,75,
这是第3次排序5,3,23,28,21,34,39,65,75,
这是第4次排序3,5,23,21,28,34,39,65,75,
这是第5次排序3,5,21,23,28,34,39,65,75,
这是第6次排序3,5,21,23,28,34,39,65,75,
这是第7次排序3,5,21,23,28,34,39,65,75,

进程已结束,退出代码为 0

可以看到第7次排序都是不必要的
修改代码
加入flag

// bubble_sort.cpp
#include <stdio.h>

void printArray(int arr[], int len);

int main() {
    int arr[] = {23,39,65,28,5,3,34,75,21};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
    int temp, flag;
    for (int i = 0; i < arrLen - 1; i++) {
        flag = 0;
        for (int j = 0; j < arrLen - i - 1; j++) {
            if (arr[j] > arr[j+1]) {
                flag = 1;
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        printf("这是第%d次排序", i);
        printArray(arr,arrLen);
        if (flag == 0) {// 若一次外层循环中都不交换(已经排好序了),则退出循环
            break;
        }
    }
    return 0;
}

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d,",arr[i]);
    }
    printf("\n");
}
posted @   卷饼侠  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示