第二篇
简单的插入排序算法的实现,以下的源码都是基于数组实现的,等学习了数据结构之后,再实现基于其他结构的。
插入排序是一种相对比较广泛的排序算法,基本思想就是将一个数插入到已经有序的序列中,时间复杂度为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);
}
}