C语言之直接插入排序算法的方法

C语言直接插入排序算法的方法

什么是直接插入排序

直接插入排序,是一种应用最广泛的排序算法之一,也是一种稳定的排序算法。它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的过程是将待排序的元素插入到已经排好序的元素中,使插入后仍保持有序。

代码实现

下面是用C语言实现直接插入排序算法的代码:

void direct_insert_sort(int arr[], int len)
{
    if (len <= 1)
        return;
    for (int i = 1; i < len; i++) {
        // 取出要插入的数
        int temp = arr[i];
        int j;
        // 在 sorted[0:i-1] 中找到合适的位置进行插入
        for (j = i - 1; j >= 0; j--) {
            if (arr[j] > temp) {
                // 如果该位置的数比要插入的数大,则将该位置的数后移
                arr[j + 1] = arr[j];
            } else {
                // 否则退出循环,temp就是要插入的位置
                break;
            }
        }
        arr[j + 1] = temp;
    }
}

示例

假设我们要排序的数组如下:

2 4 1 3 5

第一个循环

排序时,先比较2和4,不需要进行排序。接下来比较4和1,将1插入到2 4中间的位置变为2 1 4,接下来比较4和3,3插入到2 1 4中间的位置变为2 1 3 4,最后比较4和5,不需要进行排序,得到排好序的数组:

2 1 3 4 5

第二个循环

先比较1和2,1已经在正确位置,不需要进行排序。然后比较3和1,3在正确位置,不需要排序。比较3和2,2插入到1 3中间的位置成为1 2 3,然后比较4和1,4插入到1 2 3中间的位置成为1 2 3 4,最后比较5和1 2 3 4都大,不需要进行排序,得到排好序的数组:

1 2 3 4 5

这就是直接插入排序的详细过程。

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

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

相关文章

  • C++实现广度优先搜索实例

    C++实现广度优先搜索实例攻略 什么是广度优先搜索? 广度优先搜索(Breadth-First Search,也称之为BFS)是一种基于图的搜索算法,用于访问位于某个特定顶点距离为K的所有顶点。它广泛应用于树和图的数据结构中。 BFS的过程如下: 从源节点开始遍历; 访问相邻的节点; 将相邻节点加入队列; 标记已访问的节点; 重复步骤2-4,直到队列为空。 …

    算法与数据结构 2023年5月19日
    00
  • 基于C++实现的各种内部排序算法汇总

    基于C++实现的各种内部排序算法汇总 概述 本攻略汇总了常见的基于C++实现的内部排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、归并排序、快速排序、堆排序。以下是算法的具体实现过程。 选择排序 选择排序的核心思想是每次找到未排序序列中的最小值,然后放到已排序序列的末尾。具体实现过程如下: void selection_sort(vector<i…

    算法与数据结构 2023年5月19日
    00
  • 一道JS前端闭包面试题解析

    下面我来为你讲解一道 JS 前端闭包面试题的完整攻略。 面试题 下面是面试题的题目与内容: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 0); } 要求输出 0, 1, 2, 3, 4,但是实际上却是输出了 5, 5, 5, 5, 5。请问这是为什么?…

    算法与数据结构 2023年5月19日
    00
  • C语言 详细解析时间复杂度与空间复杂度

    C语言详解时间复杂度与空间复杂度 什么是时间复杂度和空间复杂度? 在计算机科学中,时间复杂度和空间复杂度用于衡量算法执行效率的指标。 时间复杂度指算法运行所需的时间,一般用大O记法表示,例如O(n)、O(n²),其中n代表输入数据规模。 空间复杂度指算法运行所需的存储空间,也一般用大O记法表示,例如O(n)、O(n²),其中n代表输入数据规模。 时间复杂度示…

    算法与数据结构 2023年5月19日
    00
  • PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)

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

    算法与数据结构 2023年5月19日
    00
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法是计算机科学领域中的一个经典问题,其功能是对给定的一组数进行全排列。在本文中,我们将对该算法的非递归实现和递归实现方法进行详细讲解。本文的代码示例基于C++语言。 非递归实现方法 算法思路 假设我们想对n个数进行全排列,那么我们可以首先将这n个数按照升序排列,然后使用以下步骤: 把这n个数的全排列问题转化为n-1个数的全排列问题; 依次取出每一个数…

    算法与数据结构 2023年5月19日
    00
  • C++STL函数和排序算法的快排以及归并排序详解

    C++ STL函数和排序算法的快排以及归并排序详解 1. 什么是STL? STL(Standard Template Library)是C++标准库中的一部分,它是由若干个模板类和函数构成的集合,提供了一些常用的数据结构和算法。 其中,数据结构包括vector(可变长数组)、list(双向链表)等,算法包括sort(排序)、find(查找)等。 2. STL…

    算法与数据结构 2023年5月19日
    00
  • JS实现给数组对象排序的方法分析

    下面是一份详细讲解“JS实现给数组对象排序的方法分析”的攻略。 一、前言 数组是 JavaScript 中非常常见的一种数据结构,它可以用来存储一系列的数据。而在实际的开发过程中,我们会经常需要对数组进行排序,这里我们就来详细讲解一下如何使用 JavaScript 实现给数组对象排序的方法。 二、排序方法详解 JavaScript 提供了三个内置的方法来对数…

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