掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

选择排序法是怎么排的 选择排序法C语言代码

选择排序法(Selection Sort)是一种简单且直观的排序算法,广泛应用于计算机科学和编程领域。它通过每次从未排序部分中选择最小(或最大)的元素,并将其放到已排序部分的末尾,逐步完成整个数组的排序。选择排序法虽然不是最高效的排序算法,但其简单易懂的特点使其成为学习排序算法的良好起点。本文将详细介绍选择排序法的工作原理、实现步骤以及C语言代码实现。通过对这些内容的深入探讨,读者可以全面理解选择排序法的运作机制,并掌握如何在实际编程中应用这一算法。

一、选择排序法的工作原理

1)基本概念

选择排序法的核心思想是:每次从未排序的部分中选择最小(或最大)的元素,将其放到已排序部分的末尾。通过重复这一过程,直到所有元素都被排序。选择排序法的主要特点是每次选择一个最小(或最大)元素进行交换,因此得名“选择排序”。

2)工作步骤

以下是选择排序法的具体工作步骤:

  1. 初始化:假设数组的第一个元素是最小值。

  2. 遍历未排序部分:从第二个元素开始,遍历剩余的未排序部分,找到真正的最小值。

  3. 交换位置:将找到的最小值与第一个元素交换位置。

  4. 重复操作:将已排序部分的长度增加1,继续从未排序部分中选择最小值,重复上述步骤,直到整个数组被完全排序。

3)示例说明

以数组 [64, 25, 12, 22, 11] 为例,详细说明选择排序法的工作过程:

  1. 第一轮:

假设 64 是最小值。

遍历剩余部分 [25, 12, 22, 11],找到最小值 11。

将 64 和 11 交换位置,得到 [11, 25, 12, 22, 64]。

  1. 第二轮:

假设 25 是最小值。

遍历剩余部分 [12, 22, 64],找到最小值 12。

将 25 和 12 交换位置,得到 [11, 12, 25, 22, 64]。

  1. 第三轮:

假设 25 是最小值。

遍历剩余部分 [22, 64],找到最小值 22。

将 25 和 22 交换位置,得到 [11, 12, 22, 25, 64]。

  1. 第四轮:

剩余部分 [25, 64] 中,25 已经是最小值,无需交换。

数组已经完全排序为 [11, 12, 22, 25, 64]。

二、选择排序法的C语言代码实现

  1. 函数定义

在C语言中,选择排序法可以通过编写一个函数来实现。以下是一个完整的C语言程序,演示如何使用选择排序法对整数数组进行排序:

#include <stdio.h>
// 选择排序函数
void selectionSort(int arr[], int n) {
    int i, j, min_idx;
    // 逐个元素进行排序
    for (i = 0; i < n - 1; i++) {
        // 假设当前元素是最小值
        min_idx = i;
        // 在未排序部分寻找最小值
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        // 交换最小值和当前元素
        if (min_idx != i) {
            int temp = arr[min_idx];
            arr[min_idx] = arr[i];
            arr[i] = temp;
        }
    }
}
// 打印数组函数
void printArray(int arr[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("原始数组: \n");
    printArray(arr, n);
    selectionSort(arr, n);
    printf("排序后的数组: \n");
    printArray(arr, n);
    return 0;
}
  1. 代码解析

selectionSort 函数:

参数 arr[] 表示待排序的数组,n 表示数组的长度。

使用两个嵌套循环实现选择排序:外层循环遍历每个元素,假设当前元素是最小值。

内层循环遍历剩余的未排序部分,寻找真正的最小值。

如果找到了更小的值,则更新 min_idx。

最后,将最小值与当前元素交换位置。

printArray 函数:

用于打印数组内容,方便查看排序前后的结果。

main 函数:

定义一个待排序的数组 arr[],并计算其长度 n。

调用 printArray 函数打印原始数组。

调用 selectionSort 函数对数组进行排序。

再次调用 printArray 函数打印排序后的数组。

  1. 运行结果

运行上述代码后,输出结果如下:

原始数组: 
64 25 12 22 11 
排序后的数组: 
11 12 22 25 64

这表明选择排序法成功地将数组从无序状态排序为有序状态。

三、选择排序法的特性分析

  1. 时间复杂度

选择排序法的时间复杂度为 O(n²),其中 n 是待排序数组的长度。无论数组是否已经部分有序,选择排序都需要进行 n-1 次选择操作,每次选择操作需要遍历剩余的 n-i 个元素(i 为当前已排序部分的长度)。因此,选择排序的时间复杂度始终为 O(n²)。

  1. 空间复杂度

选择排序的空间复杂度为 O(1),即只需要常数级别的额外空间。这是因为选择排序只涉及原数组中的元素交换,不需要额外的存储空间来保存临时数据。这种特性使得选择排序在内存有限的情况下仍然能够高效运行。

  1. 稳定性

选择排序不是一种稳定的排序算法。所谓稳定性,是指在排序过程中,相等元素的相对顺序保持不变。然而,在选择排序中,当两个相等元素分别位于已排序部分和未排序部分时,可能会发生交换,导致相等元素的相对顺序发生变化。例如,在排序过程中,如果最小值出现在已排序部分的后面,那么它会被交换到前面,从而破坏了原有顺序。

  1. 适用场景

选择排序适用于内存有限且对稳定性要求不高的场景。由于其空间复杂度为 O(1),并且不需要额外的存储空间,因此在内存资源紧张的情况下,选择排序是一个不错的选择。然而,由于其时间复杂度为 O(n²),因此对于大规模数据集,选择排序的效率较低。此外,选择排序在小规模数据集或教学演示中也具有一定的应用场景。

选择排序法是怎么排的 选择排序法C语言代码

综上所述,选择排序法是一种简单且直观的排序算法,通过每次从未排序部分中选择最小(或最大)的元素并将其放到已排序部分的末尾,逐步完成整个数组的排序。选择排序法的时间复杂度为 O(n²),空间复杂度为 O(1),但不是一种稳定的排序算法。

在C语言中,选择排序法可以通过编写一个简单的函数来实现,如本文所示的代码示例。通过对选择排序法的工作原理、实现步骤及C语言代码的详细讲解,读者可以全面理解这一经典排序算法,并在实际编程中灵活应用。

选择排序法虽然不是最高效的排序算法,但在某些特定场景下,尤其是内存有限或对稳定性要求不高的情况下,它仍然具有一定的实用价值。了解选择排序法的特点和实现方式,有助于我们在不同应用场景中做出更合适的选择。

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 全球天气预报

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future