算法大神之路----排序(插入排序法)
Posted 博客王大锤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法大神之路----排序(插入排序法)相关的知识,希望对你有一定的参考价值。
插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置.
输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕.
代码示例:
import java.util.Random; /** * 算法大神之路----排序(插入排序法) */ public class Study03 { public static void main(String[] args) { //新建一个数组 int[] arr = new int[6]; Random r = new Random(); for (int i = 0; i < arr.length; i++) { //使用随机数给数组赋值 arr[i] = r.nextInt(50); } System.out.print("原数组为:"); paint(arr); System.out.println("-----排序-----"); //插入排序法,对数据进行排序 for (int i = 0; i < arr.length; i++) { //从第二个数开始,取数,依次同它之前的数比较 for (int j = 1; j <=i ; j++) { //选择插入位置 if (arr[i] < arr[0]) { //当比第一个数小的时候 int temp=arr[i]; for (int k = i; k >0; k--) { arr[k]=arr[k-1];//循环遍历,向后移动一位 } arr[0]=temp; //当比第一个数小的时候,转换完毕后,直接跳过 continue; } //判断当不比第一个数小的情况下,在其他顺序数中,找到自己合适的位置 if(arr[i]>arr[j-1]&&arr[i]<arr[j]){ //除了第一个数以外,找到比前一个数大,比后一个数小的时候,即找到插入点 int temp=arr[i]; for (int k = i; k >=j; k--) { arr[k]=arr[k-1];//循环遍历,向后移动一位 } arr[j]=temp; } } System.out.print("选取第"+(i+1)+"个数进行插入排序:"); paint(arr); } System.out.println("---排序结束---"); System.out.print("结果为:"); paint(arr); } //将数组数据打印至控制台 public static void paint(int[] arr){ for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); } }
本示例是以数组为例,从数组第一个元素开始,依次与之前的数据进行比较,找到元素数据值比较,找到合适的位置作为插入点,然后将插入点往后的数据依次移一位,将当前数据插入到数组中,即可得到排序的效果.
控制台打印效果:
原数组为:47 48 38 45 32 12 -----排序----- 选取第1个数进行插入排序:47 48 38 45 32 12 选取第2个数进行插入排序:47 48 38 45 32 12 选取第3个数进行插入排序:38 47 48 45 32 12 选取第4个数进行插入排序:38 45 47 48 32 12 选取第5个数进行插入排序:32 38 45 47 48 12 选取第6个数进行插入排序:12 32 38 45 47 48 ---排序结束--- 结果为:12 32 38 45 47 48
因为数组是一个固定长度的存储"集合",对于改变位置,插入等操作相对于链表来说比较复杂,所以插入排序法更多的是使用在链表的集合之中.
以上是关于算法大神之路----排序(插入排序法)的主要内容,如果未能解决你的问题,请参考以下文章
[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔