C语言经典算法之简单选择排序算法

目录

前言

建议:

简介:

一、代码实现

二、时空复杂度:

时间复杂度:

空间复杂度:

三、算法的特性:

四、总结


前言

建议:

1.学习算法最重要的是理解算法的每一步,而不是记住算法。

2.建议读者学习算法的时候,自己手动一步一步地运行算法。

简介:

简单选择排序是一种基本的排序算法,其思想是每次从未排序的部分选择最小(或最大)的元素,将其放在已排序部分的末尾。

一、代码实现

复制代码
#include <stdio.h>

// 简单选择排序函数
void selectionSort(int arr[], int n) {
    int i, j, min_idx;

    // 外层循环控制每一轮选择最小元素的起始位置
    for (i = 0; i < n - 1; i++) {
        // 假设当前起始位置的元素为最小
        min_idx = i;

        // 内层循环找到未排序部分的最小元素的索引
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }

        // 交换找到的最小元素与起始位置的元素
        int temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = 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("原始数组:\n");
    printArray(arr, n);

    // 调用简单选择排序函数
    selectionSort(arr, n);

    printf("排序后的数组:\n");
    printArray(arr, n);

    return 0;
}

二、时空复杂度:

时间复杂度:

最好情况最坏情况平均情况 下的时间复杂度都是,因为在每一轮都需要找到未排序部分的最小元素。

空间复杂度:

简单选择排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为

三、算法的特性:

不稳定性

简单选择排序是不稳定的排序算法,即相同元素的相对位置在排序后可能发生变化。

比较次数

简单选择排序的比较次数与输入数据的初始状态无关,总的比较次数为(n-1) + (n-2) + ... + 1 = n(n-1)/2。

交换次数

简单选择排序的交换次数相对较少,最多为n-1次。

四、总结

简单选择排序是一种直观易懂的排序算法,适用于小规模数据集或者对排序稳定性不敏感的场景。但在实际应用中,对于大规模数据集,更高效的排序算法通常更受青睐。

相关推荐
D_FW3 分钟前
数据结构第二章:线性表
数据结构·算法
技术狂人16813 分钟前
(六)大模型算法与优化 15 题!量化 / 剪枝 / 幻觉缓解,面试说清性能提升逻辑(深度篇)
人工智能·深度学习·算法·面试·职场和发展
tobias.b31 分钟前
408真题解析-2009-8-数据结构-B树-定义及性质
数据结构·b树·计算机考研·408考研·408真题
CoovallyAIHub36 分钟前
为你的 2026 年计算机视觉应用选择合适的边缘 AI 硬件
深度学习·算法·计算机视觉
汉克老师37 分钟前
GESP2025年12月认证C++六级真题与解析(单选题8-15)
c++·算法·二叉树·动态规划·哈夫曼编码·gesp6级·gesp六级
刘立军41 分钟前
程序员应该熟悉的概念(8)嵌入和语义检索
人工智能·算法
hk11241 小时前
【Architecture/Refactoring】2026年度企业级遗留系统重构与高并发架构基准索引 (Grandmaster Edition)
数据结构·微服务·系统架构·数据集·devops
im_AMBER1 小时前
Leetcode 95 分割链表
数据结构·c++·笔记·学习·算法·leetcode·链表
Boilermaker19921 小时前
[算法基础] FooldFill(DFS、BFS)
算法·深度优先·宽度优先
leiming61 小时前
c++ find 算法
算法