高效理解排序之——插入排序-含JAVA代码(简洁明了,非无脑COPY)

前言

插入排序(Insertion Sort

大家应该都玩过扑克牌斗地主(不是欢乐斗地主啊),最喜欢除了炸弹外就是5张以上的顺子了(我们家乡话叫链子)。在每起一张牌的时候你总是能够准确的插入到一个有顺序的位置,这种按牌的大小插入到一个有序的序列中就是插入排序的思想。为了方便记忆也可以称之为扑克牌算法。

基本思路

  1. 默认第一个元素就是有序的,选择第二个元素与第一个元素比较,第二个元素小于第一个元素就与之交
  2. 换位置。这样前面两个元素就是有序的了。
  3. 用第三个元素依次与前面二个有序的元素比较。如果小于之前的元素就交换位置,这样前面三个元素都是有序的了。
  4. 用第四个元素依次与前面三个有序的元素比较...

(如果上面的思路描述你没看懂也没关系,看下面的图解)

图解

原始数据
第一轮:默认第一个元素8有序,比较7<8,交换位置,本轮结束。
第二轮:9>8,无须交换;本轮结束。
第三轮:4<9,交换位置;继续比较4<8,交换位置;继续比较4<7,交换位置;第三轮结束
第四轮:3依次比较前四个元素,交换过程参考第三轮。
第五轮:6依次比较前五个元素,交换过程参考第三轮,直至比较6>4结束,最后一轮也结束。

看了这个图解再回过头看下思路

代码

JAVA版本

import java.util.Arrays;
public class InsertionSort {
    public static void main(String []args) {
		int[] array = new int[]{8,7,9,4,3,6};
		sort(array);
		System.out.print(Arrays.toString(array));
    }
	
	public  static void sort(int[] array){
		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];
					array[j] = array[j-1];
					array[j-1] = temp;	
				}
			}
					//System.out.println("第"+i+"轮:"+Arrays.toString(array));
		}
	
	}
}

 

注意,千万不要死记代码,很容易忘记,算法思想远比代码重要。

效率

时间复杂度: O(n^{2})  空间负责度: O(1)  稳定性:稳定 

本章关键字总结:扑克牌    插入   有序

扫描二维码关注公众号,回复: 12421607 查看本文章

另外冒泡排序请参考:高效理解排序之——冒泡排序-JAVA版(简洁明了,非无脑COPY) 

猜你喜欢

转载自blog.csdn.net/weixin_48470176/article/details/110249053