服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言直接插入排序算法介绍

C语言直接插入排序算法介绍

2022-07-21 09:52绅士·永 C/C++

大家好,本篇文章主要讲的是C语言直接插入排序算法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

前言

直接 插入排序 (Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。.

废话不多说先看看代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define  _CRT_SECURE_NO_WARNINGS 1
//直接插入排序法
#include <stdio.h>
 
void Compare(int arr[], int len)
{
    int i = 0;
    for (i = 0; i < len-1; i++)//len减一因为要插入的数是i+1
    {
        int M = i;//记录有序列表最后应该元素下标
        int num = arr[i + 1];//要插入的数
        while (M >= 0)
        {
            if (num < arr[M])//继续比较
            {
                arr[M + 1] = arr[M];//交换数值
                M--;
            }
            else
            {
                break;
            }
        }
        arr[M + 1] = num;
    }
}
int main()
{
    int arr[] = { 2,3,4,1,2,34,4,56,3,434,4 };
    int len = sizeof(arr) / 4;
    int i = 0;
    Compare(arr,len);
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
 
    return 0;
}

一、什么是直接插入排序

C语言直接插入排序算法介绍

        就像玩扑克时相同,假设前n-1项是有序数列,现在将第n项插入其中,使得前n项有序。然后依次进行插入,直到将整个数列全部插入,排序完成。

        对于一组数据我们无法得知是否有序,但第一个元素只有一个,所以是有序的,所以将第一个元素作为第一个有序数列。后面的数值依次插入其中·。

二、代码讲解

?
1
void Compare(int arr[], int len)

首先创建一个插入排序的函数,需要传入数组和数据个数,因此创建int arr[],int len两个形参。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Compare(int arr[], int len)
{
    int i = 0;
    for (i = 0; i < len-1; i++)//len减一因为要插入的数是i+1
    {
        int M = i;//记录有序列表最后应该元素下标
        int num = arr[i + 1];//要插入的数
        while (M >= 0)
        {
            if (num < arr[M])//继续比较
            {
                arr[M + 1] = arr[M];//交换数值
                M--;
            }
            else
            {
                break;
            }
        }
        arr[M + 1] = num;
    }
}

因为插入排序是由前一个和后一个数据进行比较的,所以比较次数为(数据个数-1)。

?
1
2
int M = i;//记录有序列表最后应该元素下标
        int num = arr[i + 1];//要插入的数

这里需要前后两个数据比较,且这两个需要比较的数据是变化的,所以创建表示两个数据的变量。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
while (M >= 0)
    {
        if (num < arr[M])//继续比较
        {
            arr[M + 1] = arr[M];//交换数值
            M--;
        }
        else
        {
            break;
        }
    }
    arr[M + 1] = num;

利用循环进行比较,如果后一个数比前一个数小,就交换位置(数值)。如果后一个数比前一个数更大,break跳出循环。

当每一次循环比较到最后一次时,需要将两个数进行最后的交换,因为之前只是将arr[M]的值赋给了arr[M+1],此时需要将arr[M+1]的值赋给arr[M]才算完成数值交换,否则会出现比较数据丢失和重复的问题。此时的M--了的,所以需要M+1得到所需要的数据下标进行交换。

总结

到此这篇关于C语言直接插入排序算法介绍的文章就介绍到这了,更多相关C语言插入排序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_63246064/article/details/122050587

延伸 · 阅读

精彩推荐
  • C/C++C++简单实现Dijkstra算法

    C++简单实现Dijkstra算法

    这篇文章主要为大家详细介绍了C++简单实现Dijkstra算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    铭霏4682021-09-08
  • C/C++C++基础概念讲述

    C++基础概念讲述

    这篇文章主要介绍了C++基础概念,​ 本次为C++的一个开篇,重点是更好的理解C++相对于其他编程语言的一个特性,之后会持续更新,本次专栏计划是掌握C...

    一个热爱学习的深度渣渣5022022-03-10
  • C/C++通俗易懂的C++前缀和与差分算法图文示例详解

    通俗易懂的C++前缀和与差分算法图文示例详解

    这篇文章主要为大家非常通俗易懂的讲解了C++前缀和与差分算法的图文分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升...

    林深时不见鹿10582022-02-20
  • C/C++详解C++虚函数的工作原理

    详解C++虚函数的工作原理

    这篇文章主要介绍了C++虚函数的工作原理的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    让我思考一下10652021-09-13
  • C/C++C语言编程C++编辑器及调试工具操作命令详解

    C语言编程C++编辑器及调试工具操作命令详解

    这篇文章主要介绍了C语言编程C++编辑调试工具操作命令详解,本文章对C++调试工具的命令操作进行了详细的讲解,有需要的朋友可以借鉴参考下...

    未綄待續ξ12332022-01-17
  • C/C++用c++实现x的y次幂的代码

    用c++实现x的y次幂的代码

    以下实例是对使用c++实现x的y次幂的解决方法进行了介绍。需要的朋友参考下...

    C++教程网2622020-11-27
  • C/C++OpenCV4.1.0+VisualStudio2019开发环境搭建(超级简单)

    OpenCV4.1.0+VisualStudio2019开发环境搭建(超级简单)

    这篇文章主要介绍了OpenCV4.1.0+VisualStudio2019开发环境搭建(超级简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    CaliforniaCHAO11442021-10-26
  • C/C++C++ 基类指针和子类指针相互赋值的实现方法

    C++ 基类指针和子类指针相互赋值的实现方法

    下面小编就为大家带来一篇C++ 基类指针和子类指针相互赋值的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编来看看...

    C++教程网11462021-04-24