排序算法之之插入排序

今天我们要讲的排序算法是插入排序,插入排序顾名思义就是将待排序的数字插入到合适的位置去。

我们来先看一张插入排序的原理图:


(图片来自网络)

 下面我们来看一下代码实现:

	public static int[] insertionSort(int[] arr){
		
		int len = arr.length; //数组的长度
		
		for(int i = 1;i<len;i++){ //获取需要排序的数字
			
			
			for(int j=i;j>0;j--){ //和之前已经拍好序的数字比较
				
				if(arr[j]>arr[j-1]){ //如果无序 则进行交换
					
					int temp = arr[j];
					arr[j] = arr[j-1];
					arr[j-1] = temp;
				}
			}
			
		}
		return arr;
	}
	

我们看到插入排序也需要两层for循环,在最坏情况下,数组完全倒序,它的最坏时间复杂度是O(n2)

                                                           在最好情况下,也就是数组已经有序,它的最好时间复杂度是O(n)

同时,插入排序只有arr[j]>arr[j-1]时才进行交换

if(arr[j]>arr[j-1]){ //如果无序 则进行交换
					
	int temp = arr[j];
		arr[j] = arr[j-1];
		arr[j-1] = temp;
	}
两个相等数字,在排序前后它们的顺序是不变的, 插入排序是一个稳定的排序算法。

猜你喜欢

转载自blog.csdn.net/zhang_hongxin/article/details/80984623