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日

相关文章

  • JS实现的合并两个有序链表算法示例

    下面为您详细讲解JS实现的合并两个有序链表算法示例的完整攻略。 什么是合并两个有序链表? 合并两个有序链表,顾名思义就是将两个有序链表合并成一个有序链表。具体实现过程是将链表A和链表B按照顺序依次比较,将较小的节点插入到一个新的链表C中,直至A、B中有一个链表被遍历结束,另一个链表中剩余的节点则直接插入到链表C的最后。 示例如下: 链表A 链表B 合并后的链…

    算法与数据结构 2023年5月19日
    00
  • C#实现快速排序算法

    下面是C#实现快速排序算法的完整攻略: 快速排序算法简介 快速排序算法是一种高效的排序算法,它的时间复杂度为O(nlogn)。快速排序算法的基本思想是,通过一趟排序将待排序列分隔成独立的两部分,其中一部分的所有数据都比另外一部分小,然后再对这两部分继续进行排序,以达到整个序列有序的目的。 快速排序算法实现步骤 快速排序算法的实现步骤如下: 选择一个中间值,将…

    算法与数据结构 2023年5月19日
    00
  • PHP四种基本排序算法示例

    关于“PHP四种基本排序算法示例”的完整攻略,我会从以下几个方面进行详细讲解: 排序算法的概念及分类 四种基本排序算法的原理及实现方式 示例说明:冒泡排序和快速排序 排序算法的概念及分类 排序算法是计算机科学中用于将一组数据按照特定顺序进行排列的算法,常用于数据的存储和查找。排序算法可分为内部排序和外部排序,内部排序就是将数据全部放入内存中进行排序,而外部排…

    算法与数据结构 2023年5月19日
    00
  • 人脸检测中AdaBoost算法详解

    人脸检测中AdaBoost算法详解 什么是AdaBoost算法? AdaBoost(Adaptive Boosting,自适应增强算法)是一种分类算法,它可以将若干个弱分类器组合起来形成一个强分类器,以提高分类的准确率和鲁棒性。AdaBoost最初用于人脸识别领域,在实际应用中具有良好的效果。 AdaBoost分类器是如何工作的? AdaBoost分类器是基…

    算法与数据结构 2023年5月19日
    00
  • Java重点之基于比较的七大排序

    Java重点之基于比较的七大排序 在计算机科学中,排序是一种重要的基本操作,将一组元素按照一定的规则进行排列。排序算法的效率直接影响着程序的执行效率,因此需要掌握各种排序算法的实现方法及其优缺点。基于比较的排序算法,是按照元素之间的大小关系进行比较和交换,常见的基于比较的排序算法有冒泡排序、插入排序、选择排序、归并排序、快速排序、堆排序和希尔排序。 冒泡排序…

    算法与数据结构 2023年5月19日
    00
  • JAVA中数组从小到大排序的2种方法实例

    JAVA中数组从小到大排序的2种方法实例 在Java中,对数组进行排序是一项常见的任务。本文将介绍Java中数组从小到大排序的两种方法。 方法一:使用Arrays.sort()方法 Arrays.sort()方法可用于对Java中的数组进行排序。排序之后,数组中的元素将按升序排列。 以下是示例代码: import java.util.Arrays; publ…

    算法与数据结构 2023年5月19日
    00
  • C语言实现经典排序算法的示例代码

    对于C语言实现经典排序算法的示例代码,我们可以分为以下几个步骤: 1. 确定排序算法 首先需要明确使用哪种排序算法。常见的排序算法包括:冒泡排序、插入排序、选择排序、快速排序、归并排序等等。每种算法的思想和具体实现方式也有所不同。在确定算法的选择时,需要根据具体的场景和需求来进行选择。 2. 编写排序函数 确定排序算法后,需要实现一个函数用于进行排序。该函数…

    算法与数据结构 2023年5月19日
    00
  • 归并排序时间复杂度过程推导详解

    归并排序时间复杂度过程推导详解 什么是归并排序 归并排序是一种基于分治思想的排序算法,将一个无序的数组划分成若干子数组,对每个子数组进行排序,然后再将排好序的子数组进行合并,最终得到一个完整有序的数组。 归并排序的时间复杂度 归并排序的时间复杂度是O(nlogn),其中n表示数组的长度。接下来我们将详细讲解归并排序的时间复杂度推导过程。 假设有一个长度为n的…

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