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

C语言选择排序详解(零基础也能学会的选择排序算法教程)

在学习编程的过程中,排序算法是一个非常重要的基础内容。今天,我们将详细讲解一种最基础、最容易理解的排序方法——C语言选择排序。无论你是编程小白还是刚接触选择排序算法的新手,这篇C语言排序教程都会带你一步步掌握它的原理和实现。

什么是选择排序?

选择排序(Selection Sort)是一种简单直观的简单排序算法。它的基本思想是:每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

C语言选择排序详解(零基础也能学会的选择排序算法教程) C语言选择排序 选择排序算法 C语言排序教程 简单排序算法 第1张

选择排序的工作原理

假设我们有一个数组:[64, 25, 12, 22, 11],我们要对它进行升序排序。

  1. 第一轮:在整个数组中找到最小值 11,与第一个元素 64 交换 → [11, 25, 12, 22, 64]
  2. 第二轮:在剩下的 [25, 12, 22, 64] 中找最小值 12,与第二个元素 25 交换 → [11, 12, 25, 22, 64]
  3. 第三轮:在 [25, 22, 64] 中找最小值 22,与第三个元素 25 交换 → [11, 12, 22, 25, 64]
  4. 第四轮:在 [25, 64] 中找最小值 25,已在正确位置,无需交换
  5. 排序完成!

C语言实现选择排序

下面是一个完整的 C 语言选择排序代码示例:

#include <stdio.h>// 选择排序函数void selectionSort(int arr[], int n) {    int i, j, minIndex, temp;        // 遍历整个数组    for (i = 0; i < n - 1; i++) {        // 假设当前位置是最小值        minIndex = i;                // 在未排序部分查找真正的最小值        for (j = i + 1; j < n; j++) {            if (arr[j] < arr[minIndex]) {                minIndex = j;            }        }                // 如果最小值不在当前位置,则交换        if (minIndex != i) {            temp = arr[i];            arr[i] = arr[minIndex];            arr[minIndex] = temp;        }    }}// 打印数组函数void printArray(int arr[], int size) {    for (int i = 0; i < size; i++) {        printf("%d ", arr[i]);    }    printf("\n");}// 主函数int main() {    int arr[] = {64, 25, 12, 22, 11};    int n = sizeof(arr) / sizeof(arr[0]);        printf("排序前: ");    printArray(arr, n);        selectionSort(arr, n);        printf("排序后: ");    printArray(arr, n);        return 0;}  

代码解析

  • selectionSort 函数接收一个整型数组和数组长度。
  • 外层循环 i 控制已排序部分的边界。
  • 内层循环 ji+1 开始,在未排序部分中查找最小元素的索引 minIndex
  • 如果找到更小的元素,就更新 minIndex
  • 每轮结束后,将最小元素与 arr[i] 交换。

选择排序的特点

特性 说明
时间复杂度 O(n²),无论最好、最坏、平均情况都是如此
空间复杂度 O(1),原地排序,只使用常数额外空间
稳定性 不稳定(相同元素的相对位置可能改变)

总结

选择排序虽然效率不高,但因其逻辑清晰、代码简洁,非常适合初学者理解排序的基本思想。通过本篇C语言选择排序教程,你已经掌握了选择排序的核心原理、C语言实现方式以及其优缺点。希望你能动手敲一遍代码,加深理解!

记住,掌握选择排序算法是迈向更复杂算法(如快速排序、归并排序)的第一步。继续加油,编程之路越走越宽广!