在编程学习过程中,C语言排序算法是每个初学者必须掌握的基础内容。无论是面试、考试还是实际开发,排序都扮演着重要角色。本文将用通俗易懂的方式,带你一步步了解几种经典排序方法,包括冒泡排序、选择排序和快速排序。
排序就是将一组无序的数据按照某种规则(通常是升序或降序)重新排列的过程。例如,把数组 [5, 2, 8, 1] 变成 [1, 2, 5, 8]。
冒泡排序是最简单的排序算法之一。它的原理是:重复地遍历数组,比较相邻元素,如果顺序错误就交换它们。每一轮遍历都会把最大的元素“冒泡”到末尾。
#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²),适合小规模数据。
选择排序的思路是:每次从未排序部分中找到最小(或最大)的元素,放到已排序部分的末尾。
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²),但通常比冒泡排序快一点,因为交换次数更少。
快速排序是一种高效的分治算法。它选择一个“基准”(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语言排序算法:简单直观的冒泡排序、交换次数较少的选择排序,以及高效实用的快速排序。建议初学者先掌握冒泡和选择排序,再挑战快速排序。
记住:理解算法的核心思想比死记代码更重要。多动手写代码、调试,你会越来越熟练!
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025125620.html