【算法导论】插入排序法-阿里云开发者社区

开发者社区> tengweitw> 正文

【算法导论】插入排序法

简介: 插入排序法的时间复杂度为n的平方,对于较小的输入规模来说,插入排序法比合并排序法更快些。在最佳情况下,即输入数组已经排序好,则时间复杂度可表示为n,是一个线性函数;在最差情况下,即输入数组是逆序排列时,时间复杂度为.
+关注继续查看

插入排序法的时间复杂度为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的平方。在这里我就不具体介绍了。

下面简单介绍一下如何高效的计算多项式:


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【算法导论】选择排序法
选择排序法         选择排序其实是冒泡法的一种改进,其基本思路也是:先确定最小元素,再找次最小元素,最后确定最大元素。         它与冒泡排序的最大区别在于:冒泡排序是只要碰见比它大的元素就交换,而选择排序是直接将元素放在最终的确定位置,从而避免了多次交换过程。
932 0
python实现插入排序算法
插入排序,其原理是通过构建一个初始的有序序列,然后从无需序列中抽取元素,插入到有序序列的相对排序位置,就像将一堆编号混乱的书,一本一本的放到书架上,找到上下编号之间的位置插入,最后完成整理。 python实现插入排序并不难,从第二个位置开始遍历,与它前面的元素相比较,如果比前面元素小就交换位置,实...
832 0
【算法导论】桶排序
桶排序 时间复杂度为:O(n) 基本思想:将要排列的序列分成n组,每组分别进行排序,然后在合并到一起,这里面有分而治之的思想。实例说明:大家学c语言肯定学过switch-case结构,最常见的题型就是对成绩进行分类,但是这里我们是对其进行排名。
892 0
【算法导论】合并排序法
       分治法:将原问题划分为n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到了原问题的解。分治法在每一个递归上都有三个步骤:分解、解决、合并。
778 0
【算法导论】冒泡排序法
冒泡排序法 时间复杂度:O(n*n) 基本思想:从数组最后一个元素开始,依次与前一个元素比较,若比前一个元素小,则与之交换位置,然后再与当前前一个元素比较,直到遇到比它大的元素为止。
1188 0
算法研究之插入排序、冒泡排序
1、插入排序:插入是比较简单的一种排序方法,基本思想就是把数据分组两段,一部分是有序,另一部分是待排序的。把有序的数据不断的加大到全数组完成排序。 从左到右将有序数组逐渐增大。 public class Sort { public void insertSort(int[] arrays) { for (int i = 0; i < arrays.
586 0
+关注
tengweitw
所在学校:西电 兴趣爱好:编程、英语,象棋,乒乓球 email:771257840@qq.com
159
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载