插入排序的实现

来源:互联网 发布:岛崎遥香握手数据切 编辑:程序博客网 时间:2024/04/29 09:03
插入排序的思想是增量法,它每一次都将一个待排序的元素插入到已经排序好的局部列表(数组)中。我们在玩牌时,就用到了插入排序。插入排序算法的伪代码如下:
InsertionSort( A )for i<- 2 to A.length do     key <-  A[ i ]     j <-  i - 1     while j>0 and A[ j ] > key do          A[ j+1 ] = A[ j ]          i <-  i - 1     A[ j+1 ] = key


用C++实现如下:

InsertionSort(int a[],int length) {      for(i=1;i<length;<i++)         {            int key=a[i];            int j=i-1;            while((j>=0)&&key>a[j])            {                a[j+1]=a[j];                j--;                     }             a[j+1]=key;        }  }
函数中的两个参数,第一个是数组的名字,第二个是数组的长度。实现的是对整型数组排序,当然也可以采用C++中的函数模板,使其可以对任何类型都可以排序。如下;
    template <class elemType> void InsertionSort(elemType a[],int length)      {              for(int i=1;i<length;i++)              {                      elemType key = a[i];                      int j = i-1;                      while( (j>=0)&&(a[j]>key) )                      {                              a[j+1] = a[j];                              j--;                      }                      a[j+1] = key;              }      }  

测试程序如下:
    #include <iostream>      #include <string>      using namespace std;            template <class elemType> void InsertionSort(elemType a[],int length)      {              for(int i=1;i<length;i++)              {                      elemType key = a[i];                      int j = i-1;                            while( (j>=0)&&(a[j]>key) )                      {                              a[j+1] = a[j];                              j--;                      }                            a[j+1] = key;              }      }            int main()      {              int a[10] = {10,9,8,7,6,5,4,3,2,1};                InsertionSort(a,10);              for(int loop=0;loop<10;loop++)              {                      cout<<a[loop]<<endl;              }              return 0;      }  
插入排序的时间消耗为O(n^2)。


0 0