直接插入排序

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

就好像打牌,我们开始已经将手里的牌排好序了,这时我们再拿起一张牌,会将其和手里的牌进行比较,然后放到合适的位置去。

首先,我们默认数组的第一个数是已经排好序了的,也就是有序的

N为当前指向,向前比较

  4<5,替换位置,N指向下一个,目前4,5是有序的

现在n指向2

 

  2向前比较,2<5,替换位置

 

 

2继续向前比较,2<5,替换位置,2继续向前比较,2<4, 替换位置

 

目前2,4,5是有序的,N指针指向数字3

 

 

3向前比较,3<5替换位置

 

 

 3继续向前,3<4,替换位置

 

3继续向前,3>2,不用替换位置,2,3,4,5有序,N指针指向下一个

 

 

 

 

 8向前比较,8>5,不用替换

 

public static void main(String[] args)
        {
            int[] arr = {22,3,51,1,23,6,78,34};
            for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
System.out.Println(" ");
int[] arr1 = sort(arr); System.out.println("使用插入排序后得到的数组"); for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i]+" "); } } //传进来一个未排序数组,返回一个经过插入排序排序的数组 public static int[] sort(int[] array){ /* 1. 外层循环,这次不从array[0]开始了,因为我们默认第一个元素是排好序的(那必须的) 2. 内层循环,将现在选中的这个数和前面的数比较,如果小于前面的数,就互换,如此循环 可以保证内层循环结束时,下标为j及之前的数都是从小到大排好的,
3.这个交换在array[j]比array[j-1]大时就会停止,因为如果array[j]>array[j-1],由于前面的元素都是排好序的,所以array[j]一定大于array[j-2]....
*/ for(int i=1; i<array.length; i++){ for(int j=i; j>0; j--){ if(array[j]<array[j-1]){ int temp = array[j-1]; array[j-1] = array[j]; array[j] = temp; }else{
               break;
               } }
System.out.println("第"+i+"轮的排序结果是"+ Arrays.toString(array));
} return array; }

运行结果如下

 

 

 

 

冒泡排序和插入排序的区别:

 

冒泡排序:

每一次的排序过程都是将待排序列中最大的元素放到最下方(通过所有待排元素的两两比较实现的,也就是说一次的排序过程需要比较所有的元素,虽然这个过程不一定发生交换)

插入排序:

每一步将一个元素插入到合适的位置(通过将当前的待排元素和之前排好序的有序序列相比较,但是这个比较的过程并不是需要每一个元素都比较,一旦发现当前待插入元素比有序序列某一个数大就不需要和前面的数比了)

posted @ 2022-07-24 20:34  熔岩巨兽——墨菲特  阅读(59)  评论(0)    收藏  举报