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

相关推荐
ZoeJoy820 分钟前
算法筑基(二):搜索算法——从线性查找到图搜索,精准定位数据
算法·哈希算法·图搜索算法
Alicx.25 分钟前
dfs由易到难
算法·蓝桥杯·宽度优先
_日拱一卒37 分钟前
LeetCode:找到字符串中的所有字母异位词
算法·leetcode
云泽8081 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
Wilber的技术分享2 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
邪神与厨二病2 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和
梯度下降中3 小时前
LoRA原理精讲
人工智能·算法·机器学习
IronMurphy3 小时前
【算法三十一】46. 全排列
算法·leetcode·职场和发展
czlczl200209253 小时前
力扣1911. 最大交替子序列和
算法·leetcode·动态规划
靴子学长4 小时前
Decoder only 架构下 - KV cache 的理解
pytorch·深度学习·算法·大模型·kv