插入排序InsertionSort

插入排序InsertionSort
经典排序算法-插入排序InsertionSort
   插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
其时间复杂度为O(n)(最优)、O(n^2)(最差)、O(n^2)(平均)。这是一个对少量元素进行排序的有效算法。
算法描述

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

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

具体C++源代码如下:

#include  < iostream >
using   namespace  std;

/**/ //////////排序后输出函数
bool  Output( int  b[], int  length)
{
    
for (int i=0;i<length;i++)
    
{
        cout
<<b[i]<<"  ";
    }

    cout
<<endl;
    
return true;
}


/**/ //////////插入排序
void  InsertionSort( int  arr[], int  size_arr)
{
    
for (int i=1;i<size_arr;i++)
    
{
        
int key=arr[i];
        
int j=i;
        
while((j>0&& (arr[j-1]>key))
        
{
            arr[j]
=arr[j-1];   //交换顺序
            --j;
        }

        arr[j]
=key;
    }

}

void  main()
{
    
//动态输入待排序数组
    int size_a;
    cout
<<"Enter the numble of a: size_a=";
    cin
>>size_a;
    cout
<<endl<<"Enter a(size_a values):";
    
int* a=new int[size_a];
    
for (int i=0;i<size_a;i++)
    
{
        cin
>>a[i];
    }


    cout
<<endl<<"former:"<<endl;
    Output(a,size_a);
    cout
<<endl<<"later:"<<endl;

    
//调用插入排序
    cout<<"插入排序:";
    InsertionSort(a,size_a);
    Output(a,size_a);
}


 

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