C语言基本排序算法之插入排序与直接选择排序实现方法

C语言基本排序算法之插入排序与直接选择排序实现方法

本文将介绍C语言中两种常见的基本排序算法:插入排序和直接选择排序。我们将会详细阐述它们的实现方法,并提供示例代码来帮助理解和实践。

插入排序

插入排序是一种简单而常见的排序算法,它将待排序的数列分成已排序和未排序两部分,初始时已排序部分只包含一个元素,随着算法的运行,每次从未排序部分中取出第一个元素插入到已排序部分的合适位置,直到全部元素排序完毕。

具体实现方法如下:

void insertionSort(int arr[], int size) {
    int i, j, current;
    for (i = 1; i < size; i++) {
        current = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > current) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = current;
    }
}

插入排序是指在已排好序列中找到合适的位置插入当前元素,使得插入后的序列仍然有序。在实现上,我们使用了一个游标变量current来记录当前需要插入的元素,然后通过一个内层循环将已排序的元素逐个向后移位,直到找到前一个元素比current小(或已经到达序列起始位置),这时我们就知道current应该插入在这个元素后面。

下面是一个示例,演示了上述代码的运行过程:

原始数组: [25, 17, 31, 13, 2]

- 第一次排序之后: [17,25,31,13,2]
- 第二次排序之后: [17,25,31,13,2]
- 第三次排序之后: [13,17,25,31,2]
- 第四次排序之后: [2,13,17,25,31]

从上面的示例中可以看出,插入排序算法的时间复杂度为$O(n^2)$,因此在大规模数据排序时可能效率较低,但对于小规模数据排序时,插入排序是一个不错的选择。

直接选择排序

直接选择排序也是一种常见的排序算法,它的思路是将剩余未排序的最小值不断交换到剩余序列的最前端,直到所有元素按照从小到大的顺序排好。

具体实现方法如下:

void selectionSort(int arr[], int size) {
    int i, j, minIndex, temp;
    for (i = 0; i < size - 1; i++) {
        minIndex = i;
        for (j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

在实现中,我们首先通过一个外层循环来遍历整个数组,然后从当前未排序元素的剩余序列中寻找最小值,记下它的下标,最后将它和当前未排序序列中的第一个元素交换。这个交换操作相当于将当前未排序序列的最小值插入到已排序部分的末尾。

下面是一个示例,演示了上述代码的运行过程:

原始数组: [25, 17, 31, 13, 2]

- 第一次排序之后: [2, 17, 31, 13, 25]
- 第二次排序之后: [2, 13, 31, 17, 25]
- 第三次排序之后: [2, 13, 17, 31, 25]
- 第四次排序之后: [2, 13, 17, 25, 31]

直接选择排序算法的时间复杂度也为$O(n^2)$,但由于每次只需要做一次交换操作,因此在某些情况下它比插入排序的效率更高。

总结

插入排序和直接选择排序是两种常见的基本排序算法,它们的实现都相对简单,适用于小规模的数据排序。如果需要对大规模数据进行排序,可以考虑使用其他更为高效的排序算法,如快速排序、归并排序等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言基本排序算法之插入排序与直接选择排序实现方法 - Python技术站

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

相关文章

  • python KNN算法实现鸢尾花数据集分类

    Python实现KNN算法对鸢尾花数据集进行分类 介绍 KNN(K-Nearest-Neighbor)算法是一种非常常用且简单的分类算法之一。它的基本思想是把未知数据的标签与训练集中最邻近的K个数据的标签相比较,得票最多的标签就是未知数据的标签。本文将介绍如何使用Python实现对鸢尾花数据集进行KNN分类。 步骤 加载数据 首先,我们需要加载鸢尾花数据集。…

    算法与数据结构 2023年5月19日
    00
  • JS排序之选择排序详解

    JS排序之选择排序详解 选择排序简介 选择排序,就是每一次在未排序的元素中选择最小(或最大)的一个元素,放在已排序的元素的末尾,直到所有元素都排好序。 首先,我们要明白选择排序的核心思想。这种排序方式并不是两两交换位置,而是在遍历整个待排序的序列中先找到最小的元素,放在正确的位置,然后再从剩余的未排序元素中继续寻找最小的元素,放在已排序序列的末尾,依次类推,…

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

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

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解 冒泡排序概述 冒泡排序是一种基本的排序算法,它的基本思想是比较相邻的两个元素,如果前一个元素比后一个元素大,就交换这两个元素,重复进行这个过程,直到没有任何一对元素需要比较为止。冒泡排序得名于通过交换相邻的元素来把最大值“冒泡”到数列的尽头。 冒泡排序的时间复杂度为O(n²),效率较低,但其思想…

    算法与数据结构 2023年5月19日
    00
  • C++实现双向冒泡排序算法

    C++实现双向冒泡排序算法 算法介绍 双向冒泡排序,也称为鸡尾酒排序或定向冒泡排序,是冒泡排序的改进版本。其基本思路与冒泡排序相同,不同之处在于每次排序时同时从数组两侧开始,分别向中间移动。这种方法能够更快地将大数和小数分别冒泡到数组的两端,从而减少了排序次数,提高了排序效率。 下面是双向冒泡排序的具体步骤:1. 从左往右进行一轮冒泡排序,将最小的数排到数组…

    算法与数据结构 2023年5月19日
    00
  • C语言的冒泡排序和快速排序算法使用实例

    C语言的冒泡排序和快速排序算法使用实例 什么是排序算法 排序算法是一种将一组数据按照特定顺序排列的算法。常见的排序算法包括冒泡排序、快速排序、插入排序、选择排序等。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程,直到没有再需要交换的元素,即排序完成。 以下是 C 语…

    算法与数据结构 2023年5月19日
    00
  • 设计师灵感来源 细数上市公司LOGO背后的含义

    设计师灵感来源 作为设计师,找灵感是创作过程中的一项重要任务,而且好的设计往往都来自于深度的思考和充足的灵感。那么,设计师在哪里寻找灵感呢? 灵感来源 1. 观察 设计师可以通过观察日常生活中的事物来获取灵感,例如自然风光、建筑、图形等。观察中的选择与细节是关键,需要有敏锐的观察力和审美能力。 2. 学习 学习可以让设计师积累更多知识与思想,这也为他们提供了…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现的七种排序算法总结(推荐!)

    JavaScript实现的七种排序算法总结(推荐!) 简介 本文介绍了JavaScript实现的七种排序算法,包括插入排序、冒泡排序、选择排序、希尔排序、归并排序、快速排序和堆排序。每种算法都有对应的JavaScript代码实现,并且详细说明了算法的原理、时间复杂度和代码实现过程。 插入排序 插入排序是一种简单的排序算法,它的基本思想是将数组分成已排序和未排…

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