C语言每日练习之选择排序

C语言每日练习之选择排序

选择排序算法简介

选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思路是在未排序的数列中,从前往后依次选择最小的数,和第一个数进行交换,然后在剩余的数列中从前往后选择最小的数,与第二个数进行交换,直到选择到最后一个数为止。

选择排序的时间复杂度为O(n²),属于较慢的排序算法,但是它的实现简单易懂,不需要额外的空间,因此可以用来排序小规模的数据。

选择排序算法实现

以下是选择排序的C语言实现:

void selection_sort(int a[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        int min_index = i;
        for (j = i + 1; j < n; j++) {
            if (a[j] < a[min_index]) {
                min_index = j;
            }
        }
        if (min_index != i) {
            int temp = a[min_index];
            a[min_index] = a[i];
            a[i] = temp;
        }
    }
}

以上代码中,a数组表示待排序的数列,n表示数列的长度。在外层循环中,依次选择数列中的第i个元素,并记录其索引为min_index。在内层循环中,从i+1n遍历数列,找到最小值的索引,并将最小值的索引赋给min_index。如果min_index不等于i,说明第i个元素不是最小的,需要将a[i]a[min_index]进行交换。

选择排序算法示例

以下是使用选择排序对数列进行排序的示例。

示例1:对整数数组进行排序

#include <stdio.h>

void selection_sort(int a[], int n);

int main()
{
    int a[] = {30, 50, 10, 20, 40};
    int n = 5;
    selection_sort(a, n);

    printf("sorted array:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");

    return 0;
}

void selection_sort(int a[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        int min_index = i;
        for (j = i + 1; j < n; j++) {
            if (a[j] < a[min_index]) {
                min_index = j;
            }
        }
        if (min_index != i) {
            int temp = a[min_index];
            a[min_index] = a[i];
            a[i] = temp;
        }
    }
}

输出结果:

sorted array:
10 20 30 40 50

示例2:对字符串数组进行排序

#include <stdio.h>
#include <string.h>

void selection_sort(char* a[], int n);

int main()
{
    char* a[] = {"bbb", "aaa", "ddd", "ccc"};
    int n = 4;
    selection_sort(a, n);

    printf("sorted array:\n");
    for (int i = 0; i < n; i++) {
        printf("%s ", a[i]);
    }
    printf("\n");

    return 0;
}

void selection_sort(char* a[], int n) {
    int i, j;
    for (i = 0; i < n - 1; i++) {
        int min_index = i;
        for (j = i + 1; j < n; j++) {
            if (strcmp(a[j], a[min_index]) < 0) {
                min_index = j;
            }
        }
        if (min_index != i) {
            char* temp = a[min_index];
            a[min_index] = a[i];
            a[i] = temp;
        }
    }
}

输出结果:

sorted array:
aaa bbb ccc ddd

以上实例中,分别对整数数组和字符串数组进行了选择排序。字符串数组的排序使用了strcmp函数来进行字符串的比较。

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

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

相关文章

  • PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)

    当我们需要进行字符串比较时,通常会使用PHP中的strcmp()函数。但是,如果比较的字符串中包含数字,则会出现问题。举个例子,如果我们将”file9.txt”和”file10.txt”进行比较,strcmp()函数会认为”file10.txt”小于”file9.txt”,因为在ASCII码中,数字1比数字9要小。 为了解决这个问题,PHP提供了一个自然排序…

    算法与数据结构 2023年5月19日
    00
  • JavaScript数组排序的六种常见算法总结

    JavaScript数组排序的六种常见算法总结 一、排序算法简介 排序算法是计算机学科中最基本的算法之一,也是编程中必须要了解的重要内容。在JavaScript编程中,排序算法的应用非常广泛,尤其是在处理和展现数据方面。 二、排序算法分类 根据不同的排序方式和算法思想, 排序算法可以被分类为以下六类。 冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排…

    算法与数据结构 2023年5月19日
    00
  • 深入了解javascript 数组的sort方法

    深入了解JavaScript数组的sort方法 简介 在JavaScript中,数组(Array)是一个非常常用的数据结构,而sort()是Array原型上的非常常用的方法,可用于排序。数组中的元素可以是任何类型,但在排序时,所有元素都将转换为字符串形式,所以有时打算对不同数据类型的元素进行排序,您可能需要使用自定义比较函数。 基本使用方法 sort()方法…

    算法与数据结构 2023年5月19日
    00
  • 手把手教你搞懂冒泡排序和选择排序

    手把手教你搞懂冒泡排序和选择排序 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的数据为止。 算法流程 比较相邻的元素。如果当前的元素大于下一个元素,则交换它们的位置。 对每一对相邻元素都执行步骤 1,从开始第一对到…

    算法与数据结构 2023年5月19日
    00
  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • Java针对ArrayList自定义排序的2种实现方法

    这里给出针对ArrayList自定义排序的两种方法的详细攻略,分别为使用Comparator接口和使用Comparable接口。 1.使用Comparator接口 Comparator接口是JAVA中的一个接口, 我们可以在其中实现自定义的一些比较规则, 然后使用这些规则去对一些数据进行排序。 接下来是这种方式的实现步骤: 第一步:定义比较规则 我们需要实现…

    算法与数据结构 2023年5月19日
    00
  • 深入解析Radix Sort基数排序算法思想及C语言实现示例

    深入解析Radix Sort基数排序算法思想及C语言实现示例 什么是基数排序算法 基数排序即Radix Sort,是一种非比较型排序算法。相比于其他排序算法,如快速排序、归并排序等,基数排序的时间复杂度较为稳定,且不受数据规模的影响,适用于数据范围较小但位数较多的序列排序。 基数排序算法思想 基数排序算法的核心思想是按照不同位数上的数字对数据进行排序,从低位…

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部