C 插入排序

1374阅读 0评论2010-12-03 add358
分类:C/C++

 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:
  第一部分包含了这个数组的所有元素,但将最后一个元素除外
  第二部分就只包含这一 个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。
 :插入排序不适合对于数据量比较大的排序应用,如果量级小于千,那么插入排序还是一个不错的选择。

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

 示图


 示例代码     insert_sort.rar  

点击(此处)折叠或打开

  1. void insertion_sort(const int len, int *array)
  2. {
  3.     int j,i,key;
  4.     if( len <= 0 )
  5.         return;

  6.     display_array(len,array,0);
  7.     for( j=1; j<len; ++j )
  8.     {
  9.         key = array[j];
  10.         i = j - 1;
  11.         while ( i >= 0 && array[i] > key )
  12.         {
  13.             array[i+1] = array[i];
  14.             --i;
  15.         }
  16.         array[i+1] = key;
  17.         display_array(len, array,key);
  18.     }
  19. }

 执行结果

上一篇:C标识符命名原则
下一篇:C 归并排序