当前位置:首页 > C > 正文

C语言排序算法详解(从冒泡到快速排序,小白也能轻松掌握)

在编程学习过程中,C语言排序算法是每个初学者必须掌握的基础内容。无论是面试、考试还是实际开发,排序都扮演着重要角色。本文将用通俗易懂的方式,带你一步步了解几种经典排序方法,包括冒泡排序选择排序快速排序

C语言排序算法详解(从冒泡到快速排序,小白也能轻松掌握) C语言排序算法 冒泡排序 快速排序 选择排序 第1张

什么是排序?

排序就是将一组无序的数据按照某种规则(通常是升序或降序)重新排列的过程。例如,把数组 [5, 2, 8, 1] 变成 [1, 2, 5, 8]

1. 冒泡排序(Bubble Sort)

冒泡排序是最简单的排序算法之一。它的原理是:重复地遍历数组,比较相邻元素,如果顺序错误就交换它们。每一轮遍历都会把最大的元素“冒泡”到末尾。

#include <stdio.h>void bubbleSort(int arr[], int n) {    for (int i = 0; i < n - 1; i++) {        for (int j = 0; j < n - 1 - i; j++) {            if (arr[j] > arr[j + 1]) {                // 交换元素                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }    }}int main() {    int arr[] = {64, 34, 25, 12, 22, 11, 90};    int n = sizeof(arr) / sizeof(arr[0]);    bubbleSort(arr, n);    printf("排序后的数组:\n");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    return 0;}

时间复杂度:O(n²),适合小规模数据。

2. 选择排序(Selection Sort)

选择排序的思路是:每次从未排序部分中找到最小(或最大)的元素,放到已排序部分的末尾。

void selectionSort(int arr[], int n) {    for (int i = 0; i < n - 1; i++) {        int minIndex = i;        for (int j = i + 1; j < n; j++) {            if (arr[j] < arr[minIndex]) {                minIndex = j;            }        }        // 交换最小值到当前位置        int temp = arr[minIndex];        arr[minIndex] = arr[i];        arr[i] = temp;    }}

时间复杂度:同样是 O(n²),但通常比冒泡排序快一点,因为交换次数更少。

3. 快速排序(Quick Sort)

快速排序是一种高效的分治算法。它选择一个“基准”(pivot),将数组分为两部分:小于基准的放左边,大于基准的放右边,然后递归地对左右两部分排序。

void quickSort(int arr[], int low, int high) {    if (low < high) {        int pivot = partition(arr, low, high);        quickSort(arr, low, pivot - 1);        quickSort(arr, pivot + 1, high);    }}int partition(int arr[], int low, int high) {    int pivot = arr[high]; // 选择最后一个元素作为基准    int i = low - 1;    for (int j = low; j < high; j++) {        if (arr[j] <= pivot) {            i++;            int temp = arr[i];            arr[i] = arr[j];            arr[j] = temp;        }    }    int temp = arr[i + 1];    arr[i + 1] = arr[high];    arr[high] = temp;    return i + 1;}

时间复杂度:平均 O(n log n),最坏情况 O(n²),但在实际应用中非常高效。

总结

通过本教程,你已经了解了三种常见的C语言排序算法:简单直观的冒泡排序、交换次数较少的选择排序,以及高效实用的快速排序。建议初学者先掌握冒泡和选择排序,再挑战快速排序。

记住:理解算法的核心思想比死记代码更重要。多动手写代码、调试,你会越来越熟练!