C语言分析基础排序算法——选择排序

目录

选择排序

选择排序

堆排序


选择排序

选择排序

选择排序的基本思路是,定义两个区间指针begin和end,遍历数组中的每一个数据找出最大的数据的下标和最小的数据的下标,之后与beginend指针分别交换小数据与begin的位置以及大数据和end的数值,具体思路如下

cpp 复制代码
//以下面的数据为例
int data[] = { 23,34,90,16,54,44,78,67 };
cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

void swap(int* p1, int* p2)
{
    int tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
}

void SelectSort(int *data, int sz)
{
    int begin = 0;
    int end = sz - 1;
    while (begin < end)
    {
        int max_i = begin;//最大值下标
        int min_i = begin;//最小值下标
        //遍历数组找到最大值的下标和最小值的下标
        for (int i = begin; i <= end; i++)
        {
            if (data[i] > data[max_i])
            {
                max_i = i;
            }

            if (data[i] < data[min_i])
            {
                min_i = i;
            }
        }

        //走完循环交换最大值和最小值
        swap(&data[begin], &data[min_i]);
        //如果begin和max_i重合,则需要更新max_i
        if (begin == max_i)
        {
            max_i = min_i;
        }
        swap(&data[end], &data[max_i]);

        //更新比较区间
        begin++;
        end--;
    }
}

int main()
{
    int data[] = { 23,34,90,16,54,44,78,67 };
    int sz = sizeof(data) / sizeof(int);
    SelectSort(data, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", data[i]);
    }
    return 0;
}
输出结果:
16 23 34 44 54 67 78 90

堆排序

堆排序算法实现与分析见下方的博客文章

堆排序算法及分析-CSDN博客https://blog.csdn.net/m0_73281594/article/details/136407957?spm=1001.2014.3001.5501

相关推荐
xiaoxiaoxiaolll37 分钟前
金属结构疲劳寿命预测与健康监测技术
人工智能·算法·机器学习
故事和你9141 分钟前
洛谷-【图论2-1】树4
开发语言·数据结构·c++·算法·动态规划·图论
故事和你9143 分钟前
洛谷-【图论2-1】树1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
敲代码的嘎仔1 小时前
力扣高频SQL基础50题详解
开发语言·数据库·笔记·sql·算法·leetcode·后端开发
小虎牙0071 小时前
面试被问复杂度总懵?这篇指南帮你彻底搞清
算法
12.=0.2 小时前
【stm32_9.2】FreeRTOS的任务管理:任务策略,调度器启用,任务创建、删除、挂起、恢复
c语言·stm32·单片机·嵌入式硬件
普马萨特2 小时前
地理空间索引技术选型指南:GeoHash, Google S2 与 Uber H3
数据结构
knight_9___3 小时前
大模型project面试4
人工智能·python·深度学习·算法·面试·agent
l1t3 小时前
DeepSeek总结的欢迎来到 ORDER BY 丛林
数据库·算法
谙弆悕博士3 小时前
【附C源码】二叉搜索树的C语言实现
c语言·开发语言·数据结构·算法·二叉树·项目实战·数据结构与算法