算法排序4——插入排序

简介: 每个元素要比较的是它之前的已排序的元素,并判断大小,所以再定义一个元素 j,从已排序组内从后往前比较;例如当 i = 5 的时候,其实是第6个位置,而 j = 5 的时候,由于从第一个开始计数,所以就表示第五个位置,恰好满足已排序组内的最后一个,终止值就是元素第一个

🟡前言


21天挑战赛第四天,本文将讲述有关插入排序的知识


活动地址:CSDN21天学习挑战赛


🟡概述


1️⃣排序原理


1.将元素分为已排序的和未排序的两组

2.找到未排序组中的第一个元素,插入已排序的组中

3.倒序遍历已排序元素,并依次比较

4.当找到比该元素小或者等于该元素的元素时,插入

5.将其余元素向后移动一位


2️⃣原理图


4a9e0a49ceaa40f2a3ff0d0a1ccd386a.gif

9d61b62d8bba43cab411089ecbdaf3be.png


🟡调用API解决


1️⃣构造方法和成员方法


构造方法


Insertion()


成员方法


  • public static void sort(Comparable[]a):对数组a中元素进行排序


  • public static boolean greater(Comparable x, Cpmparable y):判断x是否大于y;

一般使用时会这么写:x.compareTo(y) ,再判断值是否 >0 , >0则表示 x>y


  • public static void exch(Comparable[]a, int i, int j):交换数组a中下标为 i 和 j 的元素


2️⃣解题思路


1.想要对数组内元素进行排序,就要调用 public static void sort(Comparable[]a)


2.排序时从第二个元素开始,依次将后面的每个元素进行排序,所以要调用一个for循环语句来执行,终止条件就是最后一个元素,即 i < a.length


3.每个元素要比较的是它之前的已排序的元素,并判断大小,所以再定义一个元素 j,从已排序组内从后往前比较;

例如当 i = 5 的时候,其实是第6个位置,而 j = 5 的时候,由于从第一个开始计数,所以就表示第五个位置,恰好满足已排序组内的最后一个,终止值就是元素第一个


4.当前一个元素更小时,交换两者;由于比较的是已排序好的元素,所以当碰到前者更小的时候就不用比较,直接退出循环


5.转换成字符串类型后打印输出


3️⃣代码实现


public class InsertionSort {
    public static void sort(Comparable[] a) {
        for(int i = 1; i < a.length; i++){
            for(int j = i; j > 0; j--){
                if(greater(a[j-1], a[j])){
                    exch(a,j,j-1);
                }
            }
        }
    }
    private static boolean greater(Comparable x, Comparable y){
        return x.compareTo(y) > 0;
    }
    private static void exch(Comparable[] a, int i, int j){
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
import java.util.Arrays;
public class InsertionSortTest {
    public static void main(String[] args) {
        Integer[] arr = {4,3,2,10,12,1,5,6};
        BubbleSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

f1c748bd3a58451e932cad8255ebc122.png


🟡时间复杂度


比较元素:(n-1) + (n-2) + … + 2 + 1 = 1/2 * (n^2 - n)

交换元素:(n-1) + (n-2) + … + 2 + 1 = 1/2 * (n^2 - n)

总计:n^2 - n

时间复杂度为:O(n^2)


🟡结语


插入排序也较简单基础,接下来会介绍高级排序


相关文章
|
25天前
|
人工智能 算法 测试技术
【数学】【排序】【C++算法】3027人员站位的方案数
【数学】【排序】【C++算法】3027人员站位的方案数
|
2月前
|
算法 调度
【软件设计师备考 专题 】算法探索:排序、查找、数值计算和字符串处理(二)
【软件设计师备考 专题 】算法探索:排序、查找、数值计算和字符串处理
32 0
|
5天前
|
算法
讲课:拓扑排序、最短路算法
讲课:拓扑排序、最短路算法
|
9天前
|
算法 索引
数据结构与算法-排序进阶入门
数据结构与算法-排序进阶入门
7 0
|
18天前
|
人工智能 算法 搜索推荐
直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”
直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”
|
24天前
|
人工智能 搜索推荐 Shell
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
|
26天前
|
搜索推荐 算法 Shell
【数据结构与算法】直接插入排序和希尔排序
【数据结构与算法】直接插入排序和希尔排序
|
28天前
|
机器学习/深度学习 搜索推荐 算法
【排序算法】插入排序与选择排序详解
【排序算法】插入排序与选择排序详解
|
2月前
|
存储 搜索推荐 算法
【数据结构】八大排序之计数排序算法
【数据结构】八大排序之计数排序算法
13 4
|
2月前
|
搜索推荐 算法
【数据结构】八大排序之归并排序算法
【数据结构】八大排序之归并排序算法
21 5