时间复杂度为O(n^2)
算法代码
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 65536*2
void INSERTIONSORT_recursion(short a[], int n)
{
int i;
if(n==1)return;
INSERTIONSORT_recursion(a, n-1);
a[0]=a[n-1];
for(i=n-2;i>=0&&a[0]<a[i];i--)
{
a[i+1]=a[i];
}
a[i+1]=a[0];
}
void INSERTIONSORT(short a[],int i)
{
int j,x;
x=a[i];
j=i-1;
while(a[j]>x&&j>0)
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=x;
}
int main()
{
short A[N+1];
srand(time(NULL));
for(int i=1;i<=N;i++)A[i]=rand()%10000;
clock_t start, end;
printf("INSERTIONSORT 排序中:\n");
start = clock();
for(i=1;i<=N-1;i++){
if(i%2048==0)printf(".");
INSERTIONSORT(A,i);
}
end = clock();
printf("\n排序耗费时间 : %d 毫秒\n",end-start);
printf("排列后数据:(每2048个)\n");
system("pause");
for(int j = 1; j <=N; j++)
{
printf("%d\t",A[j]);
if(j%2048==0){printf("\n");;system("pause");printf("\n");}
}
return 0;
}
测试结果