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日

相关文章

  • 荣耀畅玩8c如何双卡切换流量 荣耀畅玩8c双卡切换流量方法

    荣耀畅玩8c如何双卡切换流量 荣耀畅玩8c双卡切换流量方法 在使用荣耀畅玩8c手机时,如果你希望切换流量卡,可以通过以下方法进行设置。 1. 打开设置 首先,在手机主界面,点击“设置”图标进入设置界面。 2. 进入双卡设置 在设置界面中,找到“双卡和移动网络”选项,点击进入。 3. 切换流量卡 在双卡设置界面中,找到“流量使用情况”选项,点击进入。在“流量使…

    C 2023年5月23日
    00
  • C语言实现2048游戏代码

    C语言实现2048游戏代码攻略 一、项目背景 2048游戏是一款非常经典且受欢迎的益智类游戏,目前已经在各个平台上得到广泛的应用。实现2048游戏的过程既可以锻炼编程基础功底,还能提高逻辑思维能力。因此,本项目旨在利用C语言实现2048游戏代码,供初学者参考与学习。 二、实现步骤 1. 初始化棋盘 首先,我们需要在C语言中创建一个数组,并将所有元素初始化为0…

    C 2023年5月23日
    00
  • Linux中使用VS Code编译调试C++项目详解

    下面我将详细讲解如何在Linux中使用VS Code编译调试C++项目。 准备工作 安装VS Code 首先,我们需要安装一个文本编辑器,这里我们选择VS Code。可以到官网下载 Visual Studio Code。 下载完成后,解压安装文件并将其保存在可执行路径中(例如/usr/local/bin),使其能够在终端中运行。 安装C++编译器 接下来,我…

    C 2023年5月23日
    00
  • C语言实现通讯录的详细代码

    下面我将为您详细讲解“C语言实现通讯录的详细代码”的完整攻略: 一、需求分析1. 该通讯录需要实现的基本功能有添加联系人、删除联系人、查找联系人、修改联系人信息以及显示通讯录中所有联系人信息。2. 联系人信息需要包含姓名、电话号码、电子邮箱等信息。3. 联系人信息需要存储在文件中,以便程序重启后能够读取之前保存的联系人信息。 二、程序设计1. 定义联系人结构…

    C 2023年5月23日
    00
  • 首个 64 位 Windows 2000 系统的测试版本被发现

    首个 64 位 Windows 2000 系统的测试版本被发现攻略 背景介绍 Windows 2000是由微软公司发布的一款操作系统,它的核心采用了Windows NT技术,支持32位和64位处理器。此次发现的首个64位Windows 2000系统测试版本可以让人们更深入地了解Windows 2000的内部结构和设计。 攻略过程 寻找测试版本 首先,需要去寻…

    C 2023年5月23日
    00
  • C程序 将一个数组的所有元素复制到另一个数组

    下面我来详细讲解如何编写一份 C 程序来将一个数组的所有元素复制到另一个数组。 问题描述 假设有两个整型数组 arr1 和 arr2,现在的任务是将 arr1 的所有元素复制到 arr2 中。 思路分析 这个问题可以通过创建一个循环来实现,遍历 arr1 的所有元素并将其逐个复制到 arr2 中。因此,我们将创建一个 for 循环,并在循环中执行一个赋值操作…

    C 2023年5月9日
    00
  • c++ 单线程实现同时监听多个端口

    要实现C++单线程同时监听多个端口,可以使用select和poll这两个系统调用。这两个函数都可以用来完成IO多路复用,允许开发者同时监视多个文件描述符的状态。以下是实现方法的详细攻略: 1. 创建套接字 在开始监听端口之前,需要先创建套接字。使用socket函数可以创建一个套接字,其中参数domain设置为AF_INET(IPv4地址族),type设置为S…

    C 2023年5月22日
    00
  • JavaScript对象拷贝与Object.assign用法实例分析

    JavaScript对象拷贝与Object.assign用法实例分析 在JavaScript编程中,对象拷贝是一项非常重要的任务,因为我们经常需要在代码中使用对象,但由于JavaScript对象的引用特性,往往原始对象会被误修改或者无意间影响其他部分代码,这时候需要做对象拷贝,保持数据的安全完整性。JavaScript的标准库提供了多种深复制或浅复制对象的拷…

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