C语言选择排序算法及实例代码

C语言选择排序算法及实例代码

算法介绍

选择排序算法是一种简单的排序算法,它的基本思想是依次遍历数组元素,每次找到剩余元素中的最小值,将其放到未排序部分的最前面。它的时间复杂度为O(n²),空间复杂度为O(1),适用于各种数据规模。

选择排序算法的流程如下:

  1. 在未排序序列中找到最小元素,存放到排序序列的起始位置
  2. 再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾
  3. 以此类推,直到所有元素均排序完毕

实例代码

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

void selectSort(int arr[], int n) {
    int minIndex, temp;
    for (int i = 0; i < n - 1; ++i) {
        minIndex = i;
        for (int j = i + 1; j < n; ++j) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

其中,arr为待排序数组,n为待排序元素个数。在选择排序中,我们首先假设arr[0]为最小值,然后逐个比较其他元素,记录最小值的索引minIndex,最后将arr[minIndex]和arr[0]交换,第一轮排序结束。接着,我们假设arr[1]为最小值,逐个比较其他元素,记录最小值的索引minIndex,最后将arr[minIndex]和arr[1]交换,第二轮排序结束,以此类推。最终,数组就被排好序了。

示例说明

假设我们需要将数组[3, 5, 1, 4, 2]按升序排列,我们可以使用选择排序算法。下面是一次排序后的结果:

  1. 第一轮排序

在[3, 5, 1, 4, 2]中,3是目前为止最小的数,所以以3为基准。将3和1交换,数组变成[1, 5, 3, 4, 2]。

  1. 第二轮排序

在[1, 5, 3, 4, 2]中,1是目前为止最小的数,所以以1为基准。由于1已经是最小的了,所以不需要交换元素,数组仍然是[1, 5, 3, 4, 2]。

  1. 第三轮排序

在[1, 5, 3, 4, 2]中,2是目前为止最小的数,所以以2为基准。将2和3交换,数组变成[1, 2, 3, 4, 5]。

经过以上的三轮排序,数组[3, 5, 1, 4, 2]已经变为有序的[1, 2, 3, 4, 5],排序完成。

总结

选择排序算法是一种简单、直观的排序算法,虽然时间复杂度高达O(n²),但是当数据规模较小时,其效率还是很不错的。在实际应用中,如果待排序的数据规模较大,我们可以使用其他更高效的排序算法来完成排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言选择排序算法及实例代码 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • 酷睿i7-9700K处理器玩游戏怎么样 酷睿i7-9700K处理器游戏性能体验评测

    酷睿i7-9700K处理器玩游戏怎么样 介绍 酷睿i7-9700K处理器是英特尔推出的一款高端桌面处理器,采用了基于Coffee Lake架构的9代处理器。该处理器采用了8个物理核心和8个线程,主频频率为3.6GHz,支持Intel® 快速同步视频技术,最高Turbo频率可达到4.9GHz。 测试平台 为了测试该处理器的性能表现,我们搭建了以下测试平台: 处…

    C 2023年5月23日
    00
  • C++ vector如何动态申请内存的元素

    C++ vector是一个动态数组容器。它会在内存中申请一段连续的空间,用于存放元素,当需要插入新元素时,vector会判断当前容量是否满足要求,如果不满足,就会自动申请一段更大的空间,并将原有元素复制到新空间中。下面是C++ vector如何动态申请内存的元素的完整攻略: 申请动态内存 当需要存储一组大小未知的数据时,可以使用vector。vector支持…

    C 2023年5月23日
    00
  • C++如何实现简单的计时器详解

    接下来我会详细讲解如何用C++实现简单的计时器。这里将分为以下几个步骤: 1.头文件和命名空间 首先,我们需要包含两个头文件:<iostream>和 <chrono>。还需要声明使用 std 命名空间,这样我们就可以使用 cout 和 endl 等标准输出命令,以及定义我们的计时器。 2.计时器定义 我们将使用 std::chrono…

    C 2023年5月23日
    00
  • 使用批处理异地备份数据(winrar)

    下面我将详细讲解如何使用批处理异地备份数据(winrar)。 1. 准备工作 在使用批处理进行异地备份之前,需要先下载安装 WinRAR 软件,并确保已经设置好环境变量。同时需要确定好备份的目录和备份的目标路径。 2. 编写批处理脚本 我们可以使用 notepad 或者其他文本编辑器来编写批处理脚本。打开文本编辑器,输入如下代码: @echo off set…

    C 2023年5月22日
    00
  • C语言如何实现可变参数详解

    下面我将详细讲解如何在C语言中实现可变参数。 可变参数的实现方式 在C语言中,可变参数的实现方式是使用stdarg.h头文件中的宏和函数。该头文件包含的是可变参数列表,一些宏和函数的定义,可以实现对参数的操作。 该头文件中常用的宏有: va_start:用于初始化可变参数列表,获取第一个可变参数值的地址。 va_arg:用于获取可变参数列表的下一个参数值。 …

    C 2023年5月23日
    00
  • Vue项目报错:Uncaught SyntaxError: Unexpected token ‘<’的解决方法

    对于Vue项目中出现的“Uncaught SyntaxError: Unexpected token ‘<’”错误,一般是由于代码中使用了不符合Vue模板语法规则的字符或语法造成的。解决这种问题的方法如下: 第一步:排查代码中可能存在的错误。 1.1 首先打开Vue组件文件或模板文件,依次检查文件中使用的HTML标签、Vue模板指令以及自定义Vue组件是否符…

    C 2023年5月23日
    00
  • Qt利用QJson实现解析数组的示例详解

    以下是“Qt利用QJson实现解析数组的示例详解”的完整攻略: 1. 引入QJson库 在Qt项目中使用QJson,需要在.pro文件中添加以下代码引入QJson库: QT += network LIBS += -lqjson 2. 解析JSON字符串 使用QJson库进行解析,首先需要将JSON字符串转成QJsonDocument类型,然后调用QJsonD…

    C 2023年5月23日
    00
  • C语言中如何实现单链表删除指定结点

    实现单链表的删除指定结点,需要进行以下几个步骤: 首先判断需要删除的结点是不是链表的头结点,因为头结点是没有前驱结点的,所以需要特殊处理。 然后遍历链表查找需要删除的结点,查找时需要保存当前结点和前驱结点,以便完成删除操作。 找到需要删除的结点后,将前驱结点的next指针指向需要删除结点的下一个结点,从而完成删除操作。 以下是C语言实现单链表删除指定结点的完…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部