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次。

四、总结

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

相关推荐
百***48074 分钟前
【Golang】slice切片
开发语言·算法·golang
墨染点香17 分钟前
LeetCode 刷题【172. 阶乘后的零】
算法·leetcode·职场和发展
做怪小疯子19 分钟前
LeetCode 热题 100——链表——反转链表
算法·leetcode·链表
linweidong42 分钟前
4399 Go开发面试题及参考答案(下)
排序算法·http状态码·消息推送·topk·go并发·tcp握手·并发模型
做怪小疯子2 小时前
LeetCode 热题 100——矩阵——旋转图像
算法·leetcode·矩阵
努力学习的小廉2 小时前
我爱学算法之—— BFS之最短路径问题
算法·宽度优先
高山上有一只小老虎3 小时前
构造A+B
java·算法
木头左3 小时前
缺失值插补策略比较线性回归vs.相邻填充在LSTM输入层的性能差异分析
算法·线性回归·lstm
sin_hielo3 小时前
leetcode 2435
数据结构·算法·leetcode
crescent_悦4 小时前
PTA L1-020 帅到没朋友 C++
数据结构·c++·算法