简单的插入排序

来源:互联网 发布:电煤指标数据代码 编辑:程序博客网 时间:2024/05/17 01:31

第二篇

简单的插入排序算法的实现,以下的源码都是基于数组实现的,等学习了数据结构之后,再实现基于其他结构的。

插入排序是一种相对比较广泛的排序算法,基本思想就是将一个数插入到已经有序的序列中,时间复杂度为O(n^2),由于其为稳定的排序算法,所以当数据量较小时应用较广。

例如下边这个序列:’


实现起来比较简单,源码如下:

(1)、内部用while循环

void InsertSort(DataType a[],int n){    int i,j;    DataType temp;    for(i=0;i<n-1;i++)    {        temp=a[i+1];        j=i;        while(j>-1&&temp<a[j])        {            a[j+1]=a[j];            j--;        }        a[j+1]=temp;    }}
(2)、内部用for循环

void insert_sort(int A[],int n){    int i,j,k;    for(i=1;i<n;i++)    {        int key=A[i];        for(j=i;j>=0;j--)        {            if(key>A[j])            {                for(k=i;k>j+1;k--)                    A[k]=A[k-1];                break;            }        }   if(j==-1)   {       for(k=i;k>j+1;k--)                    A[k]=A[k-1];   }        A[j+1]=key;    }}
相比较而下,第一种代码量小且容易理解。

下边再给出递归的插入排序算法,我们这样理解,将当前的数插入到n个元素的序列中,要保证有序,那么必须保证n-1个元素的序列有序,这就构成了递归式,当然结束的标志就是当前序列中只有一个元素,即为有序。下边给出实现(要用到上边的函数来实现插入动作)。

void insert_sort_recursion(int *A,int n){    if(n>1)    {        insert_sort_recursion(A,n-1);        InsertSort(A,n);    }}
好了,关于插入排序的简单实现到此结束。后边贴出源文件

#include <iostream>typedef int DataType;using namespace std;void insert_sort(int A[],int n);void InsertSort(DataType a[],int n);void insert_sort_recursion(int *A,int n);int main(){    int A[6]={6,5,4,3,2,1};    int n=6;    //insert_sort(A,n); // InsertSort(A,n); insert_sort_recursion(A,n);    for(int i=0;i<n;i++)        cout<<A[i]<<endl;    return 0;}void insert_sort(int A[],int n){    int i,j,k;    for(i=1;i<n;i++)    {        int key=A[i];        for(j=i;j>=0;j--)        {            if(key>A[j])            {                for(k=i;k>j+1;k--)                    A[k]=A[k-1];                break;            }        }   if(j==-1)   {       for(k=i;k>j+1;k--)                    A[k]=A[k-1];   }        A[j+1]=key;    }}void InsertSort(DataType a[],int n){    int i,j;    DataType temp;    for(i=0;i<n-1;i++)    {        temp=a[i+1];        j=i;        while(j>-1&&temp<a[j])        {            a[j+1]=a[j];            j--;        }        a[j+1]=temp;    }}void insert_sort_recursion(int *A,int n){    if(n>1)    {        insert_sort_recursion(A,n-1);        InsertSort(A,n);    }}


原创粉丝点击