[趣味算法]JAVA数据结构之插入排序

本文详细介绍了插入排序的工作原理,通过实例展示了如何将无序数组排序为升序。从第二个元素开始,与左侧元素逐个比较并调整位置,直至找到正确位置。提供的模板代码实现了插入排序算法,并给出了运行结果。插入排序在小规模或部分有序的数据中表现高效,是理解排序算法的良好起点。
摘要由CSDN通过智能技术生成

14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~

目录

算法知识点

算法题目描述

做题思路

模板代码

运行结果

思维导图


算法知识点

提示:简单描述OR总结所学习的算法知识点,可列举文字/图片/视频教程

       插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。

       假设我们输入的是5,1,4,2,3,我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1515小,所以我们就交换15,原来的排列就变成了1,5,4,2,3

       接下来我们看第三个数字有没有在正确的位置。这个数字是4,它的左边数字是545小,所以我们将45交换,排列变成了1,4,5,2,3我们必须继续看4有没有在正确的位置,4的左边是114小,4就维持不动了。

        再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了1,2,4,5,3

最后,我们检查第五个数字,这个数字是33必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了1,2,3,4,5,排序完成。

 

算法题目描述

提示:简单描述算法知识点相关题目题意

        给定一组无序的数据,如果要把它们从小到大重新排序,我们要如何实现这个排序功能呢?

做题思路

提示:可简单描述解题思路,解题步骤,找好切入点,详细讲解这道题所需要使用的算法和考点

1.首先赋值要排序数字给tmp,再找到位置后再赋值回去。

2.寻找正确的位置:从已知位置往左依次比较寻找。

    public static void sort(int arr[]) {

        for (int i = 1; i < arr.length; i++) {
            int j = i;
            int tmp = arr[j];
            while (j > 0 && tmp < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = tmp;
        }

模板代码

提示:可贴上解题代码,在较难的地方可以加上自己的注释

package sort;
import java.util.Scanner;
public class InsertionSort {

    public static void sort(int arr[]) {

        for (int i = 1; i < arr.length; i++) {
            int j = i;
            int tmp = arr[j];
            while (j > 0 && tmp < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = tmp;
            print(arr);
        }
    }

    private static void print(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int arr[] = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        InsertionSort.sort(arr);
    }
}

运行结果

提示:可对同类题型或者其他相关题目做方法论总结,或对这类题型发表自己的看法,提出自己的解题经验

 

思维导图

提示:可将你接下来的学习计划拆解成思维导图的形式,让学习更有计划和效率

提醒:在发布作品前请把不用的内容删掉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Karry D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值