CodeBeauty
春暖花开
posts - 6,comments - 3,trackbacks - 0
经典排序算法-插入排序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);
}


 

posted on 2012-05-10 12:44 代码之美 阅读(1578) 评论(0)  编辑 收藏 引用 所属分类: 经典排序算法(C/C++实现)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理