冒泡排序(简单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(\(n^2\))
运算结果为

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 @ 2023-03-08 16:47  卷饼侠  阅读(67)  评论(0)    收藏  举报