算法导论-插入排序

 

以前陆陆续续看了下书,但没有写代码,这次决定从头学起,一步一步实践,加深理解,希望能够坚持记录下这期间的苦与乐。

 

第一个算法是直接插入排序:

现实实例:

      原理类似打牌的时候,整理手中的牌。开始摸牌时,手是空的,接着从桌上摸起一张牌,并将它插入到手上一把牌中的正确位置,为了找到这张牌的正确位置,必须要与手中已有的牌进行比较。

 

伪代码描述:

算法导论-插入排序

 

直接插入排序java代码(升序):

 

插入排序
   
     
1 public void insertSort( int [] a){
2 if (a.length > 0 ) {
3 for ( int j = 1 ; j < a.length ; j ++ ){
4 int key = a[j];
5 int i = j - 1 ;
6 while (i >= 0 && a[i] > key ) {
7 a[i + 1 ] = a[i];
8 i -- ;
9 }
10 a[i + 1 ] = key ;
11 }
12 }
13 }

 

其他形式:

插入排序-递归版
   
     
/*
* 递归版
*/
public void insertSortRec( int []a, int n){
if (n > 1 ){
insertSortRec(a, n
- 1 );
// 把第n个元素插入已排好序的a[0,n-2]中
insert(a, n - 1 , n);
}
}
private void insert( int [] a, int end, int n)
{
int temp = a[n - 1 ];
int i;
for ( i = end - 1 ; i >= 0 ; i -- )
{
if (a[i] > temp)
a[i
+ 1 ] = a[i];
else break ;
}
a[i
+ 1 ] = temp;
}

 

适用范围:
      直接插入排序采用的是增量的方法,在数组前n-1个元素排好序后将第n个元素适当插入。算法适用于少量数据的排序,时间复杂度为O(n^2)。

你可能感兴趣的:(插入排序)