插入排序法的时间复杂度为n的平方,对于较小的输入规模来说,插入排序法比合并排序法更快些。在最佳情况下,即输入数组已经排序好,则时间复杂度可表示为n,是一个线性函数;在最差情况下,即输入数组是逆序排列时,时间复杂度为 $an^2+bn+c$. 插入排序法的具体实现方法如下:
具体的c/c++语言实现如下:
c/c++语言实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #include<iostream> #include<ctime> using namespace std;
void InsectionSortAscend(int* arrayA,int Length); void InsectionSortDescend(int* arrayA,int Length);
void main() { clock_t start,finish; double totaltime; start=clock();
int arrayA[6]={5,2,4,6,1,3}; int Length=sizeof(arrayA)/sizeof(int);
InsectionSortDescend(arrayA,Length); InsectionSortAscend(arrayA,Length); finish=clock(); totaltime=(double)(finish-start)/CLOCKS_PER_SEC; cout<<"此两个程序的运行时间为"<<totaltime<<"秒!"<<endl; }
void InsectionSortAscend(int* arrayA,int Length) { int i=0; int j=0; int temp=0; for(i=1;i<Length;i++) { temp=arrayA[i]; j=i-1; while(j>=0&&arrayA[j]>temp) { arrayA[j+1]=arrayA[j]; j=j-1; } arrayA[j+1]=temp; } for(int i=0;i<Length;i++) cout<<arrayA[i]; cout<<endl;
}
void InsectionSortDescend(int* arrayA,int Length) { int i=0; int j=0; int temp=0; for(i=Length-2;i>=0;i--) { temp=arrayA[i]; j=i+1; while(j<Length&&arrayA[j]>temp) { arrayA[j-1]=arrayA[j]; j=j+1; } arrayA[j-1]=temp; } for(int i=0;i<Length;i++) cout<<arrayA[i]; cout<<endl;
}
|
注意:我是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域,出错体现在循环变量的重复定义上。例如:在vs2008或vs2010上 (现在都已经VS2019啦!— tengweitw于2020年07月24日),程序为:
#include
void main()
{
int i=0;
for(int i=0;i<5;i++)
printf(“%d “,i);
}
则在VC 6.0上需改为:
#include
void main()
{
int i=0;
for(i=0;i<5;i++)
printf(“%d “,i);
}
排序法除了上述所说的之外还有大家都经常用的冒泡排序法,其时间复杂度为 $n$ 的平方。在这里我就不具体介绍了 (其实,后面也介绍了,哈哈哈! — tengweitw于2020年07月24日)。
(我也不清楚,当初为什么加了下面这一段,难道是为了凑字数?— tengweitw于2020年07月24日)
下面简单介绍一下如何高效的计算多项式: