首页 > 编程语言 >算法学习之选择排序【C语言】

算法学习之选择排序【C语言】

时间:2023-04-08 23:34:44浏览次数:34  
标签:minIndex int len C语言 算法 循环 排序

选择排序

排序规则

选择排序是一种简单直观的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部元素排序完成。具体步骤如下:

1.从第一个数开始,与其后的数一一比较,如后小前大,则交换,依次比较直至最后一组数。

2.通过上述步骤,得到参加循环中最小的数,故需要进行 n-1 次循环。

3.在每次循环中,首先设定当前位置为最小值的位置,然后在未排序的部分中扫描,如果发现更小的值,则将当前位置设定为这个值的位置。

4.每次扫描完未排序的部分,就将当前位置的最小值与未排序部分的第一个元素交换。

代码实现

下面是使用 C 语言实现选择排序的代码:

#include <stdio.h>

int main() {
    int a[5] = {5, 3, 2, 1, 4};
    int len = sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < len - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < len; j++) {
            if (a[j] < a[minIndex]) {
                minIndex = j;
            }
        }
        int temp = a[i];
        a[i] = a[minIndex];
        a[minIndex] = temp;
    }
    for (int i = 0; i < len; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

在这段代码中,我们使用了两层循环来实现选择排序。外层循环控制排序的轮数,内层循环用于查找未排序部分的最小值,并将其交换到已排序部分的末尾。同时,我们还引入了一个 minIndex 变量来记录未排序部分中最小元素的下标,以避免每次比较都要交换位置。

总结

选择排序算法是一种简单但效率较低的排序算法。它的时间复杂度为 算法学习之选择排序【C语言】_排序算法,不适用于大规模数据的排序。但由于其实现简单,代码易于理解和调试,因此仍然是一种值得掌握的排序算法。

标签:minIndex,int,len,C语言,算法,循环,排序
From: https://blog.51cto.com/u_16060410/6177942

相关文章

  • ssh服务支持弱加密算法
    详情描述:远程SSH服务器配置为使用arcfour流密码或无任何密码。RFC4253不建议使用arcfour弱算法。https://tools.ietf.org/html/rfc4253#section-6.3解决方案:解决方法:*在SSH会话中仅使用CTR模式加密算法,如AES-CTR。https://tools.ietf.org/html/rfc4253#section-6.3方案......
  • C语言
    目录1.数据类型:2.数据运算:3.基本语句:1.数据类型:2.数据运算:3.基本语句:本篇随笔为记录学习所用,内容大多来源于网络,如有侵权,请联系博主。......
  • C语言字符串的使用
    做题常常遇到和字符串相关的,发现自己对《字符串》和《字符数组》有误会,因为他们的声明太像了,我会搞混。于是我在DevC++上尝试了9种不同的声明方式,想看看什么时候才算是有效的字符串声明,都是我当前水平可能遇到的。#include<stdio.h>#include<string.h>/* 解释: 字符串和字符......
  • 基于蛙跳算法的最优值计算matlab仿真
    1.算法描述            蛙跳算法是基于种群进化的元启发式算法之一,通过模拟自然界中青蛙觅食过程中种群所体现出的交流与合作行为,以实现对问题的求解。在一片湿地中,分布着一群青蛙,每只青蛙有自己的想法,每只青蛙的想法则被定义为一个解。每只青蛙找到食物时,都会......
  • C4.5分类树算法介绍
    为什么C4.5会出现?因为ID3算法节点的分支越多,信息增益也就越大,这会出现过拟合的现象,因此提出C4.5算法。图1C4.5的属性选择方法——获利比例获利比例=信息增益/分支度IV分支度IV与各分支下的类别数目之比成负相关:假如14个样本一共分4支:划分方法1为:分支1数目:分支2数目:分支......
  • 随机森林算法深入浅出
    目录一随机森林算法的基本原理二随机森林算法的优点1.随机森林算法具有很高的准确性和鲁棒性2.随机森林算法可以有效地避免过拟合问题3.随机森林算法可以处理高维度数据4.随机森林算法可以评估特征的重要性三随机森林算法的缺点1.随机森林算法对于少量数据集表现不佳2.随......
  • 理解回溯算法——从全排列问题开始
    一、简介回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。 二、从全排列问题开始理解回溯算法以数组[1,2,3]的全排列为例。先写以1开头的全排列,它们是:[1,2,3],[1,......
  • c语言拾遗
    概述gcc-E则经过预编译变成.i文件,还是c代码只是对#中进行字符串的展开和复制-S则经过编译变成.s文件,为汇编代码-c则经过汇编变成.o文件,为二进制文件然后将许多(也许也就几个).o文件链接在一起生成linux中的可执行文件.out直接gcc会将上述整个如果要在编译停下来用......
  • 【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现
    承接上文承接上一篇文章【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)】我们基本上对层级时间轮算法的基本原理有了一定的认识,本章节就从落地的角度进行分析和介绍如何通过Java进行实现一个属于我们自己的时间轮服务......
  • go语言学习-冒泡排序
    冒泡排序冒泡排序属于交换类的排序算法,比如有一段乱序的数,591681464925463第一轮迭代:从第一个数开始,依次比较相邻的两个数,如果后面的一个数比前面的一个数大,那么交换位置,直接到处理最后一个数,最后这个数是最大的第二轮迭代,因为最后一个数已经是最大的了,重复第一轮操作,......