伪代码:
1 INSERTITION-SORT(A) 2 for j = 2 to A.length 3 key = A[j] 4 //Insert A[j] into sorted sequence A[1..j-1]. 5 i = j-1 6 while i>0 and A[i]>key 7 A[i+1] = A[j] 8 i = i-1 9 A[i+1] = key
其中参数说一个数组A[1..n],包含长度为n的要排序的一个序列。该算法原址排序输入的数,在任何时候,最多只有其中常数个数字存储在数组外面。
性能分析:
时间复杂度:
- 最好情况: O(n)
- 最坏情况和平均情况: O(n2)
- 额外空间: O(1)
- 稳定
- 适用情况:n小的数组
Java代码:
1 public static void InsertSort(int arr[]) 2 { 3 int i,j; 4 int temp; 5 for(j=1;j<arr.length;j++) 6 { 7 temp = arr[j]; 8 i = j-1; 9 while(i>=0 && arr[i]>temp) 10 { 11 arr[i+1] = arr[i]; 12 i--; 13 } 14 arr[i+1] = temp; 15 } 16 }