C程序 选择排序

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日

相关文章

  • C语言系统调用约定

    C语言系统调用约定 在C语言中,系统调用使得程序能够与操作系统进行交互,包括执行I/O操作、内存管理等等。C语言中的系统调用约定是指C语言程序如何调用操作系统提供的系统调用。在不同的操作系统中,系统调用的约定可能不同,因此我们需要针对不同的操作系统学习和使用不同的系统调用约定。 基本概念 在C语言中,我们可以使用syscall函数进行系统调用。syscall…

    C 2023年5月23日
    00
  • C语言与C++项目实现相互调用

    C语言与C++项目实现相互调用 前言 C语言和C++是程序员们在开发过程中经常使用的编程语言,两种语言有着相似的语法以及基础概念,但是在细节方面却存在较大的差异。由于C++是在C语言基础上的扩展,因此,C语言与C++的项目实现相互调用是可行的。 在本文中,我们将详细介绍如何在C语言项目和C++项目之间实现相互调用,并提供两个示例来说明该过程。 准备工作 在开…

    C 2023年5月23日
    00
  • Windows 环境下使用 Qt 连接 MySQL

    下面我将为您详细讲解“Windows 环境下使用 Qt 连接 MySQL”的完整攻略。 前置条件 在进行本教程之前,您需要确保您已经做好了以下几项准备: 您已经在 Windows 系统中安装了 Qt; 您已经在 Windows 系统中安装了 MySQL 数据库,并且已经创建了一个数据库。 如果您还没有完成上述准备,请先完成准备工作。 步骤一:安装 MySQL…

    C 2023年5月23日
    00
  • Qt利用ffmpeg实现音视频同步

    我将详细讲解“Qt利用ffmpeg实现音视频同步”的完整攻略。 1. 确定开发环境 首先,我们需要安装Qt和ffmpeg。Qt是一个跨平台的C++应用程序开发框架,可以用于开发Windows、MacOS、Linux等应用程序,而ffmpeg是一个广泛使用的开源跨平台的音视频处理工具。 2. 引入ffmpeg开发库 在Qt项目中使用ffmpeg,需要引入ffm…

    C 2023年5月22日
    00
  • 英语打字练习软件-c语言编写

    ​学习c语言的时候编写的英语打字练习软件,已经上传github 自取 https://github.com/grey-wood-wolf/typing-software   软件实际效果如下 在下载的压缩包里,运行exe文件就可使用,源码为ConsoleApplication1这个文件      部分代码如下: void welcom()//介绍 { int…

    C语言 2023年4月18日
    00
  • 2048小游戏C语言实现代码

    首先,2048小游戏是一款经典的益智游戏,玩家需要通过合并数字达到2048的目标。对于C语言实现,代码可以分为几个部分:界面显示、随机数字生成、输入处理、数字移动和合并、判断游戏是否结束。 界面显示 为了在终端中显示2048的游戏界面,我们需要使用C语言的库函数ncurses。首先,需要安装ncurses库,在Ubuntu系统下使用以下命令安装: sudo …

    C 2023年5月24日
    00
  • C++实现大数相乘算法

    C++ 实现大数相乘算法 当我们需要计算两个超出计算机整数范围的大数相乘时,传统的计算方法已经无法满足需求,因此需要寻找一种适合大数相乘的算法。本文将介绍一种针对大数相乘的算法 – Karatsuba乘法,并使用C++语言进行实现。 Karatsuba 乘法的原理 Karatsuba 乘法的基本思想是将两个大数a和b分别划分为高位和低位,进而利用递归的方法将…

    C 2023年5月22日
    00
  • C语言详解strcmp函数的分析及实现

    C语言详解strcmp函数的分析及实现 strcmp函数简介 strcmp()函数是C语言中用于比较两个字符串大小的函数。该函数通常用于在程序中对字符串进行排序、查找或其他处理。 strcmp()函数的定义如下: int strcmp(const char *s1, const char *s2); 该函数接受两个字符串指针参数s1和s2,并返回一个整型值。…

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