插入排序
2012-07-29 12:39 coodoing 阅读(419) 评论(0) 编辑 收藏 举报1、算法原理介绍:
直接插入排序是一种最简单的排序方法,通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。即先将第1个记录看作是一个有序的记录序列,然后从第2个记录开始,依次将未排序的记录插入到这个有序的记录序列中去,直到整个文件中的全部记录排序完毕。
2、可视化操作:
具体的实现步骤为:
插入x之前:
插入x之后:
伪代码如下:
1: for i ← 1 to i ← length(A)-1
2: {
3: // A[ i ] is added in the sorted sequence A[0, .. i-1]
4: // save A[i] to make a hole at index iHole
5: item ← A[i]
6: iHole ← i
7: // keep moving the hole to next smaller index until A[iHole - 1] is <;= item
8: while iHole >; 0 and A[iHole - 1] > item
9: {
10: // move hole to next smaller index
11: A[iHole] ← A[iHole - 1]
12: iHole ← iHole - 1
13: }
14: // put item in the hole
15: A[iHole] ← item
16: }
3、java代码实现
1: static void insertSort(int[] a,int n )
2: {
3: for(int i =1;i<n;i++)
4: {
5: int p = a[i];
6: insert(a,i,p);
7: }
8: }
9:
10: static void insert(int[] a, int index, int x) {
11: //元素插入数组a[0:n-1]
12: int i;
13: for(i=index-1;i>=0&&x<a[i];i--)
14: {
15: a[i+1] = a[i];
16: }
17: a[i+1]= x;
18:
19: }
4、时间复杂度
最佳运行时间即给定的元素为递增序列,时间复杂度为O(n)
最坏运行时间即给定的元素为降序序列,每次插入都需要同前面的所有元素进行比较,时间复杂度为O(n^2)