0
点赞
收藏
分享

微信扫一扫

JavaEE 的入门

NicoalsNC 2024-08-11 阅读 47

一、插入排序概念

直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、插入排序原理

1. 初始化:将数组的第一个元素视为已排序的部分。

2. 遍历:从第二个元素开始,每次选择一个元素,将其插入到已排序部分的适当位置。

3. 比较和移动:为了找到新元素的正确位置,从后向前比较新元素与已排序部分的元素,如果新元素较小,则将较大的元素向后移动一位。

4. 重复:重复上述过程,直到所有元素都被插入到已排序部分。

三、代码示例

#include <stdio.h>

void insertionSort(int *arr, int size)
{
    int key = 0;
    int i, j;
    for (i = 1; i < size; i++)
    {
        key = arr[i];               /*当前待插入的元素*/
        for (j = i - 1; arr[j] > key && j >= 0; j--)  /*将大于key的元素向后移动一位*/
        {
            arr[j + 1] = arr[j];
        }
        arr[j + 1] = key;
    }
}

void print(int *arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr[] = {5, 4, 2, 3, 1, 6, 0};
    int size = sizeof(arr) / sizeof(int);
    printf("插入排序前的数组:");
    print(arr, size);
    printf("插入排序后的数组:");
    insertionSort(arr, size);
    print(arr, size);
    return 0;
}

运行结果:

 

四、插入排序复杂度

时间复杂度

最好情况:当输入数组已经是排序好的时候,时间复杂度为O(n)。

平均情况和最坏情况:当输入数组是随机或逆序的时候,时间复杂度为O(n²)。

空间复杂度

直接插入排序是原地排序算法,空间复杂度为O(1)。

举报

相关推荐

0 条评论