代码改变世界

每周一算法之三——插入排序

2011-12-12 23:20  贼寇在何方  阅读(370)  评论(0编辑  收藏  举报

插入排序是这么回事儿:构建有序序列,把未排序的元素插入到有序序列的合适位置。

原理也很简单啦,步骤一般是这样的(摘自维基百科)

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置中
  6. 重复步骤2

够简单吧,直接上代码

// 插入排序
// C++实现
#include <iostream>

using namespace std;

template<class T>
void insert_sort( T array[], const int size )
{
T temp;
int i, j, k;

for( i=1; i<size; i++ )
{
for( j=0; j<i; j++ )
{
if( array[j]>array[i] )
break;
}

if( j != i )
{
temp = array[i];
for( int k=i; k>j; k-- )
array[k] = array[k-1];

array[j] = temp;
}
}
}

int main(void)
{
int array[] = {2, 5, 9, 3, 12, 1, 6, 11, 4, 7, 13, 8, 10};
insert_sort(array, sizeof(array) / sizeof(int));

for (int i = 0; i < sizeof(array) / sizeof(int); i ++)
cout<<array[i]<<endl;

return 0;
}

 

太懒了,注释都省了

早点睡觉