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

目录

选择排序

选择排序

堆排序


选择排序

选择排序

选择排序的基本思路是,定义两个区间指针begin和end,遍历数组中的每一个数据找出最大的数据的下标和最小的数据的下标,之后与begin和end指针分别交换小数据与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

相关推荐
碧海银沙音频科技研究院2 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
通问AI2 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo6232 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
Zwawa3 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
Scintilla_y3 小时前
DAY2 滑动窗口
算法·leetcode·散列表
lvwangshu3 小时前
笛卡尔树
算法·图论
026d233 小时前
状态信号只知“其然”不知“其所以然”:变工况机械故障诊断的物理盲区
算法
姜鱼问生3 小时前
备份和服务器在同一台机器上,等于没备份
算法·架构
姜鱼问生3 小时前
别再 chmod 777 了,用 ACL 给它开一扇窗
后端·算法·架构
YSL0701243 小时前
贪吃蛇小游戏---古法编程
数据结构·游戏程序