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语言求阶乘之和的三种实现方法(先阶乘再累加)

    当我们需要计算n的阶乘之和时,可以采用以下三种方法进行实现: 方法一:单层for循环 在本方法中,我们可以将for循环的条件直接设为i<=n即可,每次循环计算i的阶乘并加到sum中,最后输出sum即可。 示例代码: #include <stdio.h> int main() { int n, sum=0, factorial=1; prin…

    C 2023年5月23日
    00
  • 非常经典的C语言趣味题目

    下面是“非常经典的C语言趣味题目”的完整攻略。 1.题目描述 题目描述:输入一个正整数n,按十进制输出n的二进制表示,并输出其中1的个数。 2.思路分析 1.输入一个正整数n;2.将n转换成二进制表示。对于十进制数,可以不断对2取余数和商,然后将余数倒序排列起来就可以得到二进制表示,具体可以使用循环实现;3.遍历二进制表示,数出其中1的个数。 3.代码实现 …

    C 2023年5月23日
    00
  • C语言实现UDP通信

    下面是C语言实现UDP通信的完整攻略。 1. 确定需要使用的库和头文件 首先需要引入的头文件有: #include <stdio.h> //标准输入输出库 #include <stdlib.h> //标准库 #include <string.h> //字符串处理库 #include <unistd.h> //U…

    C 2023年5月23日
    00
  • 浅谈C语言数组元素下标为何从0开始

    关于C语言数组元素下标为何从0开始的问题,经过长期的发展和实践,现在已经成为C语言的基本规则之一。在这里,我将详细讲解为什么C语言数组下标从0开始,以及这种方式的优势和成本。 为什么C语言数组元素下标从0开始? 在C语言中,数组是一组数据的集合,它们具有相同的类型。数组中的每个元素都有一个唯一的索引,通过该索引可以访问该数组的元素。C语言数组元素下标从0开始…

    C 2023年5月23日
    00
  • C语言之结构体定义 typedef struct 用法详解和用法小结

    C语言之结构体定义 typedef struct 用法详解和用法小结 在C语言中,结构体是一种自定义的数据类型,它可以包含多个不同类型的变量,并被视为一个整体。但是,直接定义结构体并不方便,因此可以使用typedef struct来定义结构体类型,使代码更加简洁和易读。 typedef struct的基本用法 typedef struct的语法格式为: ty…

    C 2023年5月22日
    00
  • C#实现生成所有不重复的组合功能示例

    生成所有不重复的组合是一项常见的算法问题,可以使用C#编程语言轻松实现。下面是一个完整的攻略: 1. 程序实现思路 生成所有不重复的组合功能的实现思路如下: 创建一个长度为n的数组,数组中存储n个不同的元素。 从数组中选出其中的k个元素,形成一个组合。 从数组中选取下一个元素,生成下一个组合。 重复上述步骤,直到所有组合都被生成。 2. 实现代码 下面是使用…

    C 2023年5月22日
    00
  • C语言 按值函数调用

    C语言 按值函数调用 在 C 语言中,函数可以按值调用(也称为传值调用)或按引用调用(也称为传引用调用)。 按值调用函数时,函数会使用参数的值进行计算,并在函数中对其进行修改不会影响原始值。 下面是一个按值调用的例子: #include <stdio.h> // 定义一个函数,输入两个整数并返回它们的和 int add(int a, int b)…

    C 2023年5月9日
    00
  • 进程

    进程、轻量级进程和线程 进程在教科书中通常定义:进程是程序执行时的一个实例,可以把它看作充分描述程序已经执行到何种程度的数据结构的汇集。 从内核的观点,进程的目的就是担当分配系统资源(CPU时间、内存等)的实体。   当一个进程被创建时,他几乎于父进程相同。它接受父进程地址空间的一个(逻辑)拷贝,并从进程创建系统调用的下一条指令开始执行于父进程相同的代码。尽…

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