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

C语言分类算法详解(从冒泡排序到快速排序,手把手教你实现经典排序算法)

在计算机科学中,C语言分类算法是学习数据结构与算法的基础内容。无论你是编程初学者还是有一定经验的开发者,掌握几种经典的排序方法都是必不可少的。本文将用通俗易懂的语言,带你一步步理解并实现两种最常用的排序算法:冒泡排序和快速排序。

什么是分类(排序)算法?

分类算法(Sorting Algorithm),也叫排序算法,是指将一组无序的数据按照特定规则(如从小到大或从大到小)重新排列的过程。在C语言中,我们通常对数组进行排序。

C语言分类算法详解(从冒泡排序到快速排序,手把手教你实现经典排序算法) C语言分类算法 冒泡排序C语言实现 快速排序C语言代码 数据结构排序算法 第1张

一、冒泡排序(Bubble Sort)

冒泡排序是最简单、最容易理解的排序算法之一。它的基本思想是:重复地遍历待排序的数组,比较相邻的两个元素,如果顺序错误就交换它们。这个过程会持续进行,直到整个数组有序为止。

为什么叫“冒泡”?因为每一轮比较后,最大的元素会像气泡一样“浮”到数组末尾。

C语言实现冒泡排序

#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]);    printf("排序前: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    bubbleSort(arr, n);    printf("\n排序后: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    return 0;}

这段代码展示了如何使用冒泡排序C语言实现。时间复杂度为 O(n²),适合小规模数据排序。

二、快速排序(Quick Sort)

快速排序是一种高效的分治排序算法,由英国计算机科学家 Tony Hoare 在1960年提出。它通过选择一个“基准”(pivot)元素,将数组分为两部分:小于基准的放在左边,大于基准的放在右边,然后递归地对左右子数组进行排序。

快速排序平均时间复杂度为 O(n log n),是实际应用中最常用的排序算法之一。

C语言实现快速排序

#include <stdio.h>// 分区函数:返回基准元素的正确位置int partition(int arr[], int low, int high) {    int pivot = arr[high]; // 选择最后一个元素作为基准    int i = (low - 1); // 小于基准的元素的索引    for (int j = low; j <= high - 1; 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);}// 快速排序主函数void quickSort(int arr[], int low, int high) {    if (low < high) {        int pi = partition(arr, low, high);        quickSort(arr, low, pi - 1);   // 排序左半部分        quickSort(arr, pi + 1, high);  // 排序右半部分    }}int main() {    int arr[] = {10, 7, 8, 9, 1, 5};    int n = sizeof(arr) / sizeof(arr[0]);    printf("排序前: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    quickSort(arr, 0, n - 1);    printf("\n排序后: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    return 0;}

以上就是快速排序C语言代码的完整实现。虽然逻辑稍复杂,但效率远高于冒泡排序。

总结

通过本文,你已经学会了两种经典的数据结构排序算法在C语言中的实现方式:

  • 冒泡排序:简单直观,适合教学和小数据量。
  • 快速排序:高效实用,适合大多数实际应用场景。

建议初学者先掌握冒泡排序,再挑战快速排序。多动手写代码、调试运行,才能真正理解算法的精髓!

如果你觉得这篇文章对你有帮助,欢迎收藏并分享给更多学习C语言的朋友!