【算法导论】插入排序法
来源:互联网 发布:php true false大小写 编辑:程序博客网 时间:2024/05/29 15:12
插入排序法的时间复杂度为n的平方,对于较小的输入规模来说,插入排序法比合并排序法更快些。在最佳情况下,即输入数组已经排序好,则时间复杂度可表示为n,是一个线性函数;在最差情况下,即输入数组是逆序排列时,时间复杂度为.插入排序法的具体实现方法如下:
具体的c/c++语言实现如下:
#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; }/*****************************************/ 插入排序/输入:数组arrayA、数组长度/输出:由小到大已排列好的数组/时间复杂度:n的平方/*****************************************/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;}/*****************************************/ 插入排序/输入:数组arrayA、数组长度/输出:由大到小已排列好的数组/时间复杂度:n的平方/*****************************************/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上,程序为:
#include<stdio.h>
void main()
{
int i=0;
for(int i=0;i<5;i++)
printf("%d ",i);
}
则在VC 6.0上需改为:
#include<stdio.h>
void main()
{
int i=0;
for(i=0;i<5;i++)
printf("%d ",i);
}
排序法除了上述所说的之外还有大家都经常用的冒泡排序法,其时间复杂度为n的平方。在这里我就不具体介绍了。
下面简单介绍一下如何高效的计算多项式:
- 【算法导论】插入排序法
- 算法导论:插入排序
- 插入排序【算法导论】
- 算法导论-----插入排序
- 算法导论-插入排序
- 《算法导论》 插入排序
- 【算法导论】插入排序
- 算法导论--插入排序
- 【算法导论】插入排序
- 《算法导论》插入排序
- 算法导论-插入排序算法
- 算法导论读书笔记(插入排序)
- [算法导论]2.1 插入排序
- 算法导论2.1插入排序
- 【算法导论】 插入排序实现
- 算法导论_插入排序
- 算法导论 2.1 插入排序
- 算法导论--插入排序--P10
- oracle for update和for update nowait的区别
- 图片(使用Lumia920T)
- hibernate 乐观锁与悲观锁使用
- 第十四周 项目1抽象基类
- Android: NDK编程入门笔记
- 【算法导论】插入排序法
- XCODE DEBUG技巧
- Unity3D系列教程–使用免费工具在Unity3D中开发2D游戏 第三节
- matlab学习
- 《windows核心编程》读后编码--关键段
- 第十四周 项目三:定义抽象类CSolid,含有表面积及体积的纯虚数,派生出CCube,CBall,CCylinder,分别表示正方体、球体及圆柱体
- 项目2抽象基类与派生类
- 【swing学习】swing的基本要点
- java date类和calendar类