算法——插入排序

简介: 算法——插入排序

一、算法简介

插入排序(Insertion Sort)是一种简单直观的排序算法,它将待排序列表分为已排序和未排序两部分,每次从未排序部分中取出一个元素,依次插入到已排序部分的适当位置。

插入排序的基本思想是将未排序部分的第一个元素与已排序部分进行比较,并找到它在已排序部分中的正确位置。然后将其插入到适当位置后,已排序部分的长度增加1,未排序部分的长度减少1。不断重复该过程,直到未排序部分为空,整个序列排序完成。

插入排序的实现通常使用一个for循环和一个while循环嵌套。外层for循环用于遍历未排序部分,内层while循环用于将选中的元素与已排序部分进行比较并找到合适的插入位置。

插入排序是一种稳定的排序算法,它对于小规模数据或基本有序的数据表现良好,但在处理大量乱序数据时,效率较低。由于它的实现简单、易于理解,插入排序也常被用作其他高级排序算法中的子过程。

二、算法实现

以下是插入排序算法的C#实现示例:

public static void InsertionSort(int[] array)
{
    int n = array.Length;
    for (int i = 1; i < n; i++)
    {
        int key = array[i];
        int j = i - 1;
        // 从已排序部分向后比较,寻找插入位置
        while (j >= 0 && array[j] > key)
        {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = key;
    }
}
public static void InsertionSort(int[] array)
{
    int n = array.Length;
    for (int i = 1; i < n; i++)
    {
        int key = array[i];
        int j = i - 1;
        // 从已排序部分向后比较,寻找插入位置
        while (j >= 0 && array[j] > key)
        {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = key;
    }
}

调用示例:

int[] array = { 64, 34, 25, 12, 22, 11, 90 };
InsertionSort(array);
Console.WriteLine("排序后的数组:");
foreach (int element in array)
{
    Console.Write(element + " ");
}
int[] array = { 64, 34, 25, 12, 22, 11, 90 };
InsertionSort(array);
Console.WriteLine("排序后的数组:");
foreach (int element in array)
{
    Console.Write(element + " ");
}

这段代码实现了插入排序算法。它使用一个for循环遍历未排序部分,内部的while循环则将选中的元素与已排序部分进行比较,并找到合适的插入位置。将元素插入到正确位置后,已排序部分长度增加,未排序部分长度减小,直到整个序列排序完成。

上述实现只是一种基本示例,未包含额外的优化措施。在实际应用中,可以根据具体需求进行一些优化改进,如改进比较操作、减少元素的移动次数等。

相关文章
|
10天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之插入排序
Java数据结构与算法:排序算法之插入排序
|
16天前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
26天前
|
算法 搜索推荐
数据结构与算法-插入排序
数据结构与算法-插入排序
13 2
|
27天前
|
算法 搜索推荐 数据可视化
【漫画算法】插入排序:插入宝石的传说
【漫画算法】插入排序:插入宝石的传说
|
11天前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
13 0
|
13天前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:直接插入排序和希尔排序
【C/排序算法】:直接插入排序和希尔排序
9 0
|
16天前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
18 0
|
20天前
|
搜索推荐
排序算法---插入排序-----详解&&代码
排序算法---插入排序-----详解&&代码
|
1月前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
19 0
|
2月前
|
搜索推荐 算法 Java
sort-05-insert sort 插入排序算法详解
这是一个关于排序算法的系列文章总结,包括冒泡排序、快速排序、选择排序、堆排序、插入排序等10种排序算法的详细讲解和Java实现。插入排序是一种简单直观的排序算法,通过构建有序序列并逐个插入新元素来排序。提供的Java代码展示了插入排序的实现过程,并附有测试示例。所有算法已开源在GitHub项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中。