Sort a linked list using insertion sort.
public ListNode insertionSortList(ListNode head) {
ListNode ihead = new ListNode(-1);
while (head != null) {
ListNode cur = ihead, tmp = head.next;
while (cur.next != null && cur.next.val < head.val)
cur = cur.next;
head.next = cur.next;
cur.next = head;
head = tmp;
}
return ihead.next;
}
对数组用直接插入法进行排序。直接插入是稳定的排序算法。
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上
(n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
private static int[] insertSort(int[] nums) {
for (int i = 1; i < nums.length; i++) {
int tmp = nums[i];
int j;
for (j = i - 1; j >= 0 && nums[j] > tmp; j--) {
nums[j + 1] = nums[j];
}
nums[j + 1] = tmp;
}
return nums;
}