Hark的数据结构与算法练习之插入排序

算法说明:

先是拿语言进行一下描述:

假如是做降序排序,那么从头开始扫描每个数字,使每个数字与它前面的若干数字进行比较,直接找到小于当前数字a(当前数字以a代替)的数字b(小于a的数字以b代替)。 然后将数字a插入到数学b的位置。将数字b到数字a前一位的数字向后移动一位。 至此,排序结束。

语言表述其实懂这个算法的人能会懂,不懂这个算法的人不太容易看懂,所以还是以例子做一下说明:

例如有一个数组int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3 ,8},一共9个元素。
假设是降序排序。
先扫描第二个数,让它与它前面的数进行比较,这时前两个数是{5,9},9大于5,那么把9插入放到5的位置即arrayData[0],把5后移放到arrayData[1]
再扫描第三个数,这时因为前面排序所以前三个数就变成了{9,5,6},拿6先与前面的5比较,大于5,那么再往前扫描,与9比较,发现小于9,那么我们将6插入放到5的位置即arrayData[1],将5后移到arrayData[2]。
再扫描第四个数,这时前四个数就变成了{9,6,5,7}, 将7向前扫描进行比较,最终将7插入放到6的位置即arrayData[1],然后6后移放到arrayData[2],5后移放到arrayData[3]
以此类推,最后得出结果。

 

算法复杂度:

O(n2)

 

空间复杂度:

O(1)

 

代码:

使用语言:Java

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
/*
 * 插入排序
 */
public class InsertionSorting {
    public static void main(String[] args) {
        int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 };
        InsertionSortingMethod(arrayData);
        for (int integer : arrayData) {
            System.out.print(integer);
            System.out.print(" ");
        }
    }
     
    public static void InsertionSortingMethod(int[] arrayData)
    {
        int temp;
        int index;
        for (int i = 1; i < arrayData.length; i++) {
            temp = arrayData[i];
            index = i - 1;
            while (index >= 0 && arrayData[index] < temp) {
                arrayData[index + 1] = arrayData[index];
                index--;
            }
            arrayData[index + 1] = temp;
        }
    }
}

  

结果:

1
9 8 7 6 5 4 3 2 1

 

论证算法复杂度:因为是双层循环,所以最坏算法复杂度是O(n2)。

论证空间复杂度:因为作为临时空间进行数据交换的是几个常量,所以空间复杂度是O(1)

 

posted @   HarkLee  阅读(283)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示