MST
星途 面试题库

面试题:C语言冒泡排序的优化

请用C语言实现冒泡排序,并说明如何对基本的冒泡排序算法进行优化以减少不必要的比较次数,同时展示优化后的代码。
47.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

基本冒泡排序实现

#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换arr[j]与arr[j + 1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

优化思路

  1. 设置标志位:在每一轮比较开始前,设一个标志位flag0,若在该轮比较中有元素交换,则将flag设为1。如果一轮比较结束后flag仍为0,说明数组已经有序,可提前结束排序。

优化后的代码

#include <stdio.h>

// 优化后的冒泡排序函数
void optimizedBubbleSort(int arr[], int n) {
    int i, j;
    int flag;
    for (i = 0; i < n - 1; i++) {
        flag = 0;
        for (j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换arr[j]与arr[j + 1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = 1;
            }
        }
        if (flag == 0) {
            break;
        }
    }
}