java插入排序

来源:互联网 发布:皓思网络 编辑:程序博客网 时间:2024/06/10 07:38

插入排序:插入排序指的是每次讲待排序的数据插入到已排序好序列的 正确位置。

比如站队时我们让学生的从低到高排列,后面来的学生需要将自己插入到队伍的正确位置中。

伪代码://升序排列InsertSort(array)for  j = 2 to array.lengthvalue  = array[j]i = j - 1while (i > 0 and a[i] > value)array[i + 1] = array[i]i =  i - 1array[i + 1] = value
java代码:import java.util.Arrays;public class InsertSortTest {public static void main(String[] args) {int[] arr = {56, 22, 44, 10, 15, 12, 1, 123, 34, 123};System.out.println("before: " +Arrays.toString(arr));InsertSortTest inSort = new InsertSortTest();int[] result = inSort.insertSort(arr);System.out.println("after: " + Arrays.toString(result));}//升序排列public int[] insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {int temp = arr[i];int j = i - 1;while(j >= 0 && arr[j] > temp ) {arr[j + 1] = arr[j];j--;}arr[j + 1] = temp;}return arr;}}


时间复杂度

1.最坏的情况

数组是倒序的,此时花的时间最长。插入第二个元素时需要与第一个比较,插入第三个元素时需要与第二个元素比较,。。。依次类推

数组的第n个需要比较(n - 1)次。对比较次数的等差数列求和结果为n(n-1)/2, 最坏的情况下时间复杂度为O(n^2)

2.最好的情况

数组是正序的,每次插入只需要比较前面一个元素,n个元素的数组共需要比较(n - 1)次,因此最好情况下时间负责度为O(n)

原创粉丝点击