(1)算法描述
对于给定的线性空间,依次考察每个元素,当指定的元素比后一个元素大(或者小)的时候就交换位置,然后交换过来的后一个元素继续向前比较,只要比该元素大(或者小)就两两交换,直到不符合交换条件或者到达最前端。
(2)算法图解
(3)C/C++代码实现
CustomSort.h
void insertionSort(int arr[], int number);
CustomSort.cpp
void insertionSort(int arr[], int number) {
// 一次考察每个元素
for (int i = 1; i < number; i++) {
// 从考察的当前元素开始,向后查找当前元素该放到哪里
for (int j = i; j > 0; j--) {
// 如果当前元素比前一个元素小就交换
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
// 如果如果没有比这个元素大的就提前终止
break;
}
}
}
}
(4) Java代码实现
public class InsertionSort {
public static int[] sort(int[] arr, int number) {
for (int i = 1; i < number; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j-1]) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
} else {
break;
}
}
}
return arr;
}
}
(5)时间复杂度分析
虽然插入排序会在数据满足约定的情况下提前终止排序,但是最坏的情况下还是O(n^2)。由于数据的频繁交换,会使得同等数据情况下插入排序慢与选择排序。
原文地址:http://blog.51cto.com/xvjunjie/2328116
时间: 2024-10-10 03:25:20