本文主要是介绍插入排序 【InsertionSort】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
插入排序
插入排序的工作方式像排序一手扑克牌。 假设左手的牌是排序好的,桌面上的是未知的牌
1. 开始时,我们的左手为空并且桌子上的牌面向下。
2. 然后,我们每次从桌子上拿走一张牌并将它插入左手正确的位置。 为了找到插入的正确位置,我们将要插入的牌与左手的牌挨着比较,直接找到合适的位置并插入进去。
在实际的实现过程中,我们可以将数组的第0个元素看成是已经排序好的,然后从第二个元素开始进行插入。
算法实现
public class InsertionSort {public void insertionSort(int[] arr) {if(arr == null || arr.length < 2) {return ;}for (int i = 1; i < arr.length; i++) {for (int j = i; j > 0 && arr[j] < arr[j-1] ; j--) {swap(arr, j, j-1);}}}private void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp; }
}
时间复杂度
因为每次插入的时候都需要去比较,所以时间复杂度为O(N^2)
稳定性
因为插入的数据是挨着顺序进入的,所以排序前后的相对顺序是不会改变的。所以是稳定的算法。
这篇关于插入排序 【InsertionSort】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!