Algorithm backup ---- Insertion Sort(插入排序算法)
2009-11-03 16:21
507 查看
Insertion sort is a simple sorting algorithm, a comparison sort in which the sorted array (or list) is built one entry at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort,heapsort or merge sort. However, insertion sort provides several advantages:
1. simple implementation
2. efficient for (quite) small data sets
3. adaptive, i.e. efficient for data sets that are already substantially sorted: the time compexity is O(n + d), where d is the number of inversions
4. more efficient in practice than most other simple quadratic (i.e. O(n2)) algorithms such as selection sort or bubble sort: the average running time is n2/4, and the running time is linear in the best case
5. stable, i.e. does not change the relative order of elements with equal keys
6. in-place, i.e. only requires a constant amount O(1) of additional memory space
7. online, i.e. can sort a list as it receives it.
Below is the implementation using C#:
/// <summary>
/// Insertion sort algorithm
/// </summary>
/// <param name="numbers">numbers array to be sorted</param>
public static void InsertionSort(int[] numbers)
{
for (int i = 1; i < numbers.Length; ++i)
{
int temp = numbers[i];
int j = i;
//Find its place and insert.
while (j > 0 && numbers[j - 1] >= temp)
{
numbers[j] = numbers[j - 1];
j--;
}
numbers[j] = temp;
}
}
Go to my home page for more posts
1. simple implementation
2. efficient for (quite) small data sets
3. adaptive, i.e. efficient for data sets that are already substantially sorted: the time compexity is O(n + d), where d is the number of inversions
4. more efficient in practice than most other simple quadratic (i.e. O(n2)) algorithms such as selection sort or bubble sort: the average running time is n2/4, and the running time is linear in the best case
5. stable, i.e. does not change the relative order of elements with equal keys
6. in-place, i.e. only requires a constant amount O(1) of additional memory space
7. online, i.e. can sort a list as it receives it.
Below is the implementation using C#:
/// <summary>
/// Insertion sort algorithm
/// </summary>
/// <param name="numbers">numbers array to be sorted</param>
public static void InsertionSort(int[] numbers)
{
for (int i = 1; i < numbers.Length; ++i)
{
int temp = numbers[i];
int j = i;
//Find its place and insert.
while (j > 0 && numbers[j - 1] >= temp)
{
numbers[j] = numbers[j - 1];
j--;
}
numbers[j] = temp;
}
}
Go to my home page for more posts
相关文章推荐
- One Algorithm A Day --- INSERTION-SORT--算法入门
- Introduction to Algorithm - Summary of Chapter 2(1) - Insertion sort
- Algorithm--Insertion Sort
- 插入排序算法(Insertion Sort)的两种实现
- Algorithm backup ---- Heap Sort(堆排序算法)
- Algorithm_1_Insertion_Sort
- Algorithm backup ---- Merge Sort(归并排序算法)
- Insertion sort algorithm
- LeetCode147_Insertion Sort List(用插入排序算法对链表进行排序) Java题解
- insert sort algorithm 插入排序算法 java实现
- Sort Algorithm Part-2 Insertion Sort
- 1098. Insertion or Heap Sort
- InsertionSort -- 插入排序(C++)
- LeetCode----Insertion Sort List
- 1098. Insertion or Heap Sort (25)
- 折半插入排序(Binary Insertion Sort)的C语言实现
- LeetCode:Insertion Sort List
- 1098. Insertion or Heap Sort (25)
- Algorithm.Sort (各类排序)
- 为什么自己写的快速排序要比algorithm命名空间下的sort要慢?