数据结构与算法Java实现(4)——插入排序

插入排序,是一种稳定的,内部排序方法(快速排序是稳定的)
时间复杂度: 最差情况O( n2)最好情况O(n)
空间复杂度: O(l)
原理
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
代码实现

/**
 * 插入排序
 * @author scz
 *
 */
public class InsertSort
{
	
	public static int[] sort(int[] a){
		
		for(int i=1; i<a.length; i++){
			int temp = a[i];//保存每次需要插入的那个数
			int j;
			for(j=i; j>0&&a[j-1]>temp; j--){//这个较上面有一定的优化
				a[j] = a[j-1];//吧大于需要插入的数往后移动。最后不大于temp的数就空出来j
			}
			a[j] = temp;//将需要插入的数放入这个位置
			BubbleSort.bubbleSort(a);	
		}
		return a;
	}
	public static void main(String[] args)
	{
		int[] a = {5,4,7,6,2,8};
		BubbleSort.bubbleSort(a);	
	}
 
}

现在Arrays.sort和Collections.sort所用的TimSort算法便是基于合并算法和插入算法衍生出来一种。

猜你喜欢

转载自blog.csdn.net/weixin_43701058/article/details/89950047