C程序 插入排序

下面是关于"C程序 插入排序"的完整使用攻略。

插入排序是什么?

插入排序是一种简单直观的、比较常用的排序算法。其基本思想是将待排序的数组分成两部分,已排序和未排序,然后将未排序的元素一个一个插入到已排序部分的正确位置上,直到整个数组都被排序。

插入排序的实现

下面是一份C程序的插入排序实现,以进行升序排序为例。

#include <stdio.h>

void insertion_sort(int arr[], int n) {
    int i, j, key;

    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main() {
    int arr[] = { 12, 11, 13, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);

    insertion_sort(arr, n);

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

插入排序的示例解析

我们来看一个使用插入排序的示例:如何对一个整数数组进行排序。

示例一

假设有一个未排序的整数数组:[ 12, 11, 13, 5, 6 ]

  1. 首先,将第一个元素(12)视为已排序数组,将第二个元素(11)视为未排序数组。
  2. 比较11和12,发现11比12小,将11插入到已排序数组的第一个位置,得到已排序数组为:[ 11, 12 ],未排序数组为:[ 13, 5, 6 ]
  3. 将第三个元素(13)视为未排序数组,将它和已排序数组中的每一个元素进行比较。发现13比12大,于是13插入到已排序数组的第二个位置,得到已排序数组为:[ 11, 12, 13 ],未排序数组为: [ 5, 6 ]
  4. 将第四个元素(5)插入到已排序数组中。由于它比已排序数组中所有的元素都要小,因此将5插入到已排序数组的第一个位置,得到已排序数组为:[ 5, 11, 12, 13 ],未排序数组为:[ 6 ]
  5. 最后,将最后一个元素(6)插入到已排序数组。将6和已排序数组中的元素进行比较,发现6比11小,于是将6插入到已排序数组的第二个位置,得到已排序数组为:[ 5, 6, 11, 12, 13 ],未排序数组为空。
  6. 数组已经排序完成。

示例二

还有一个示例是对字母数组进行排序,文字表述略有些不便,我们这里就直接通过代码来举例:

#include <stdio.h>

void insertion_sort(char arr[], int n) {
    int i, j;
    char key;

    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main() {
    char arr[] = { 'd', 'a', 'c', 'b', 'e' };
    int n = sizeof(arr) / sizeof(char);

    insertion_sort(arr, n);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%c ", arr[i]);
    }
    printf("\n");
    return 0;
}

上面的代码使用插入排序对字母数组进行排序。运行结果如下:

Sorted array: a b c d e

结论

以上就是C程序插入排序的完整使用攻略,包含了对算法的解释、代码的说明以及两个排序示例的详细解析。希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C程序 插入排序 - Python技术站

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

相关文章

  • VS2019如何添加头文件路径的方法步骤

    首先,在VS2019中添加头文件路径需要进行以下步骤: 打开要添加头文件路径的项目的属性页面。右击项目名称,选择“属性”或者按下快捷键“Alt+Enter”打开属性页面。 在属性页面中,选择“VC++目录”选项卡。 在“包含目录”一栏中,点击右侧的下拉箭头,选择“编辑”或者“”选项。 在弹出的窗口中,点击右侧的“新建文件夹”按钮,然后输入头文件路径所在的文件…

    C 2023年5月23日
    00
  • C++11获取线程返回值的实现代码

    让我来详细讲解C++11获取线程返回值的实现代码,包括以下几个步骤: 第一步:定义线程函数 在使用C++11获取线程返回值时,我们需要先定义一个线程函数,该函数负责执行耗时的代码逻辑,并返回需要的结果。例如,下面这个线程函数将通过计算两个整数的和来返回一个结果: int sum(int a, int b) { return a + b; } 第二步:创建线程…

    C 2023年5月22日
    00
  • ASP调用WebService转化成JSON数据,附json.min.asp

    ASP调用WebService转化成JSON数据,可以通过以下步骤完成: 创建一个WebService 在Visual Studio中创建一个WebService项目,添加一个Web服务方法,例如: [WebMethod] public string HelloWorld(string name) { return "Hello " + …

    C 2023年5月23日
    00
  • php 读写json文件及修改json的方法

    下面给出 PHP 读写 JSON 文件并修改 JSON 的方法的详细攻略。 一、读取 JSON 文件 PHP 中可以使用 json_decode 函数来读取 JSON 文件,将 JSON 字符串转化为 PHP 中的数组或对象。 示例代码如下: $file_path = "test.json"; $json_string = file_ge…

    C 2023年5月23日
    00
  • C 语言基础教程(我的C之旅开始了)[五]

    下面详细讲解“C语言基础教程(我的C之旅开始了)[五]”的完整攻略。 标题 C 语言基础教程(我的 C 之旅开始了)[五] 概述 本次教程主要涵盖C语言中的结构体和联合体。在学习本篇教程前,需要先掌握C语言中的变量、循环、条件语句、指针等基础知识。 结构体 结构体是 C 语言中自定义的一种数据类型,通过结构体可以将多个不同类型的变量组合成一个整体,方便统一管…

    C 2023年5月23日
    00
  • c语言函数如何求两个数的最大值

    下面是标准的Markdown格式的完整攻略,介绍如何使用C语言函数求两个数的最大值。 C语言函数如何求两个数的最大值 在C语言中,我们可以使用if语句和ternary运算符来计算两个数的最大值,但是这种方式不够优雅和高效。相反,我们可以使用一个简单的函数来完成这个任务。下面是一个函数示例: int max(int num1, int num2) { if(n…

    C 2023年5月23日
    00
  • 利用idea搭建SSM项目看这一篇就够了

    以下是详细讲解“利用idea搭建SSM项目看这一篇就够了”的完整攻略,其中包含两个示例说明。 1. 确定开发环境 要开发SSM项目,需要先确定好我们的开发环境。我们需要安装以下软件: JDK:Java Development Kit。 Tomcat:Web服务器,用于部署项目。 MySQL:关系型数据库系统。 Maven:Java项目的构建工具。 IDEA:…

    C 2023年5月23日
    00
  • 详解C++中的万能头文件

    好的。首先让我解释一下什么是万能头文件。 在C++中,头文件是开发者定义新类型、函数和变量的地方。当一个程序中需要使用某些函数或变量时,我们需要包含对应的头文件。万能头文件指的是一些包含了大量库函数和其他头文件信息的头文件,如: #include <iostream> #include <stdio.h> #include <s…

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