八大排序算法 —— 直接插入排序

直接插入排序

核心思想:将所有的待排元素依次和已排元素进行比较,如果待排元素小于某个已排元素(从最小的已排元素开始比较),则将待排元素插入到该已排元素的前面。


图解:
这里写图片描述

直接插入排序是最简单的插入排序,平均时间复杂度为:O(n2),空间复杂度是O(1)。是一种稳定的排序(比较过程中,相同的元素,位置不会替换)。

算法代码实现:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int []data  = new int[8];
        for(int i= 0;i<data.length ;i++){
            data[i] = sc.nextInt();
        }
        //直接插入排序
        data = directInsertionSort(data);

        for(int i = 0;i<data.length ;i++){
            System.out.print(data[i]+" ");
        }

    }


    //直接插入排序的算法实现
    public static int[] directInsertionSort(int[] data){
        //第一个元素无比较对象,从第二个开始比较
        for(int i = 1;i<data.length;i++){
            //比较到第i+1个元素时,依次和他前面i个元素比较大小
            //从第一个元素开始(因为第一个最小)
            c:for(int j= 0;j<i;j++){
            //找到前i个中比他大的第一个元素。
                if(data[i]<data[j]){
                    //依次替换,从第i个元素开始替换,替换到制定位置
                    for(int p = i;p>j ;p--){
                        int tmp  = data[p];
                        data[p] = data[p-1];
                        data[p-1] = tmp;
                    }
                    //替换完成之后就结束寻找的循环,对下一个元素进行排序
                    break c;
                }
            }
        }
        return data;
    }

猜你喜欢

转载自blog.csdn.net/cqx13763055264/article/details/81636316