C程序 选择排序

yizhihongxing

C程序 - 选择排序攻略

什么是选择排序?

选择排序是一种简单的排序算法。它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完为止。

选择排序的过程

选择排序的过程可以通过以下步骤来描述:

  1. 从序列中选择最小/最大之一的元素;
  2. 把它与待排序的数组中的第一个元素交换位置;
  3. 从剩余的元素中继续选择最小/最大元素,重复步骤2,直到排序完成。

下面是一个使用选择排序对数组进行排序的C程序示例:

#include <stdio.h>

void select_sort(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;
            }
        }

        // 把最小值放到未排序部分的最前面
        int temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main()
{
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr)/sizeof(arr[0]);
    select_sort(arr, n);

    printf("排序后的数组:\n");
    for (int i=0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

示例说明

示例一

待排序数组为 {64, 25, 12, 22, 11}。运行 select_sort(arr, n) 函数,排序过程如下:

  1. i=0, 从 {64, 25, 12, 22, 11} 中找到最小值为 11,将其和第1个元素 64 交换,数组变为 {11, 25, 12, 22, 64}
  2. i=1, 从 {25, 12, 22, 64} 中找到最小值为 12,将其和第2个元素 25 交换,数组变为 {11, 12, 22, 64, 25}
  3. i=2, 从 {22, 64, 25} 中找到最小值为 22,将其和第3个元素 22 交换,数组变为 {11, 12, 22, 64, 25}
  4. i=3, 从 {64, 25} 中找到最小值为 25,将其和第4个元素 64 交换,数组变为 {11, 12, 22, 25, 64}
  5. i=4, 从 {64} 中找到最小值为 64,将其和第5个元素 64 交换,数组变为 {11, 12, 22, 25, 64}

排序完成之后,数组变为 {11, 12, 22, 25, 64}

示例二

待排序数组为 {45, 11, 67, 2, 87, 32, 99}。运行 select_sort(arr, n) 函数,排序过程如下:

  1. i=0, 从 {45, 11, 67, 2, 87, 32, 99} 中找到最小值为 2,将其和第1个元素 45 交换,数组变为 {2, 11, 67, 45, 87, 32, 99}
  2. i=1, 从 {11, 67, 45, 87, 32, 99} 中找到最小值为 11,将其和第2个元素 67 交换,数组变为 {2, 11, 45, 87, 32, 99, 67}
  3. i=2, 从 {45, 87, 32, 99, 67} 中找到最小值为 32,将其和第3个元素 45 交换,数组变为 {2, 11, 32, 87, 45, 99, 67}
  4. i=3, 从 {87, 99, 67} 中找到最小值为 67,将其和第4个元素 87 交换,数组变为 {2, 11, 32, 67, 45, 99, 87}
  5. i=4, 从 {45, 99} 中找到最小值为 45,将其和第5个元素 45 交换,数组变为 {2, 11, 32, 67, 45, 99, 87}
  6. i=5, 从 {99, 87} 中找到最小值为 87,将其和第6个元素 99 交换,数组变为 {2, 11, 32, 67, 45, 87, 99}

排序完成之后,数组变为 {2, 11, 32, 45, 67, 87, 99}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C程序 选择排序 - Python技术站

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

相关文章

  • iOS实现高效裁剪图片圆角算法教程

    iOS实现高效裁剪图片圆角算法教程 简介 在iOS 开发中,常常需要对图片进行裁剪,比如实现图片的圆角,圆形等效果。在实现这些效果时,我们通常会遇到性能问题和视觉效果不好的问题。因此,我们需要一种高效裁剪图片的算法。 本文主要介绍一种高效的裁剪图片算法,可以实现圆角、圆形裁剪等效果。 步骤 步骤1:创建CALayer 我们先创建一个 CALayer 对象,作…

    C 2023年5月23日
    00
  • 关于C语言除0引发的思考

    关于C语言除0引发的思考 在C语言中,除数为0是一个经常出现的问题,因为这种情况会导致程序崩溃。我们需要理解C语言的除法运算,以便更好地处理这种异常情况。 C语言除数为0的问题 在C语言中,当一个数除以0的时候,会导致除法运算异常。程序将会因此崩溃。这个问题的解决方法是,我们可以在代码中包含对0的判断,避免代码解除0。 #include <stdio.…

    C 2023年5月23日
    00
  • C语言中的多态

    多态是面向对象编程中的一个重要概念,但是在C语言中并不是一种原生特性。然而,通过使用函数指针和结构体等技术,我们可以实现在C语言中实现多态。下面是一份详细的使用攻略: 什么是多态 多态是一种可以让不同对象具有不同行为的编程技术,它允许我们使用统一的接口处理不同类型的数据。在面向对象编程中,多态通常是通过继承和方法重写来实现的。在 C 语言中,则主要通过函数指…

    C 2023年5月10日
    00
  • Visual Studio Code 配置C、C++环境/编译并运行的流程分析

    以下是详细讲解“Visual Studio Code 配置C、C++环境/编译并运行的流程分析”的完整攻略: 1. 安装Visual Studio Code 首先,需要从Visual Studio Code官网下载并安装Visual Studio Code编辑器。 2. 安装C、C++编译器 在Windows系统中,可以通过安装Mingw-w64或Cygwi…

    C 2023年5月23日
    00
  • 关于在C程序中处理UTF-8文本的方法详解

    关于在C程序中处理UTF-8文本的方法详解 在处理UTF-8编码的文本时,我们需要使用一些特殊的方法,而不能像处理ASCII编码的文本那样简单。以下是在C程序中处理UTF-8文本的方法详解: 1. 了解UTF-8编码 要处理UTF-8编码的文本,首先需要了解UTF-8编码的原理。UTF-8是一种变长字符编码,每个字符的长度都不一定相同。在UTF-8编码中,如…

    C 2023年5月23日
    00
  • 如何修复Win11上的ntdll.dll崩溃错误? ntdll.dll崩溃问题解决办法

    如果你遇到了Win11上的ntdll.dll崩溃错误,可以根据以下步骤进行修复: 1. 重新启动电脑 首先,尝试重新启动电脑,因为某些系统问题可以通过重新启动来解决。如果重新启动后,错误仍然存在,请继续下一步操作。 2. 更新系统和驱动程序 从开始菜单中打开设置,并点击“更新和安全”选项。在右侧窗口中,点击“Windows 更新”并查找可用更新。如果有更新,…

    C 2023年5月23日
    00
  • Ubuntu 17.04系统下源码编译安装opencv的步骤详解

    Ubuntu 17.04系统下源码编译安装opencv的步骤详解 在Ubuntu 17.04系统中,安装opencv可以通过源或二进制包进行,但由于源和二进制包中的opencv版本较低,不能满足一些开发者的需求。因此,通过源码编译来安装opencv是一个不错的选择。下面将详细介绍源码编译安装opencv的步骤。 步骤 安装必要的依赖项和工具(推荐使用apt-…

    C 2023年5月23日
    00
  • 探究c++虚表实现代码

    探究 C++ 虚表的实现代码是一个相当深入的话题,需要对 C++ 对象模型以及函数调用机制有一定的了解。下面将介绍如何进行这样一个的探究,包括以下的几个部分: 对 C++ 对象模型的介绍 虚表的定义和用途 虚表的实现方式 通过示例说明虚表的使用和作用 对 C++ 对象模型的介绍 在了解虚表实现之前,我们需要先了解 C++ 对象模型。C++ 对象模型指的是 C…

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