1. Insertion sort (v1)
1.1 C++实现
template<typename T>
void insertionSort(T arr[], int n){
for( int i = 1 ; i < n ; i ++ ) {
// 寻找元素arr[i]合适的插入位置
for( int j = i ; j > 0 ; j-- )
if( arr[j] < arr[j-1] )
swap( arr[j] , arr[j-1] );
else
break;
}
return;
}
1.2 Python实现
def insert_sort_v1(arr):
n = len(arr)
for i in range(1, n):
for j in range(i, 0, -1):
if arr[j] < arr[j-1]:
arr[j], arr[j-1] = arr[j-1], arr[j]
else:
break
2. Insertion sort (v2)
在一个近乎有序的数组中插入排序有着很大的优势,可作为nlogn
级别排序算法的子过程。
2.1 C++实现
template<typename T>
void insertionSort(T arr[], int n){
for( int i = 1 ; i < n ; i ++ ) {
T e = arr[i];
int j; // j保存元素e应该插入的位置
for (j = i; j > 0 && arr[j-1] > e; j--)
arr[j] = arr[j-1];
arr[j] = e;
}
return;
}
2.2 Python实现
def insert_sort_v2(arr):
n = len(arr)
for i in range(1, n):
e = arr[i]
j = i-1
while j >= 0 and arr[j] > e:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = e