简单插入算法的C++实现

 算法就不赘述啦,抄袭一下维基百科吧...

 

 

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

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

 

我的代码里也有解释,看代码吧...

 

这个是升序的代码,降序的道理相同...

 

  1. #include <iostream> 
  2. using namespace std; 
  3.  
  4. //简单插入排序(Insertion Sort) 
  5. void Insertion_sort(int array[],int n) 
  6.     /*将数组类比为打牌时要抽的牌,假设array[0]即为抽到的第一张牌, 
  7.     只有一张牌时默认为已经排好序(就一张排啥嘛)。抽取下一张牌,即array[1],放在 
  8.     右手(即temp=array[i]),看看左手已经排好的牌,从后往前看,只 
  9.     要牌比右手上的牌大的话,就让牌右移一位,为右手的牌插入左手腾空间, 
  10.     ,接着往右看,直到找到插入点*/
  11.  
  12.     int temp,i,j; 
  13.  
  14.     for(i=1;i<=n;i++) //因为array[0]相当已经排序,所以从array[1]开始依次向后当做要插入的数 
  15.     { 
  16.         temp=array[i]; 
  17.         for(j=i-1;j>=0;j--) /*从后往前看,只要比temp大,就后移一位*/ 
  18.         { 
  19.             if(temp<array[j]) 
  20.                 array[j+1]=array[j]; 
  21.             else 
  22.                 break
  23.         } 
  24.         array[j+1]=temp; 
  25.     } 
  26.  
  27. void main(){ 
  28.  
  29.     int a[]={5,4,3,2,1}; 
  30.     Insertion_sort(a,5); 
  31.  
  32.     for(int m=0;m<5;m++){ 
  33.         cout<<a[m]<<endl; 
  34.     } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章