【算法导论】插入排序法

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

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

时间: 2024-09-18 11:30:19

【算法导论】插入排序法的相关文章

算法之【插入排序法】

算法之插入排序法 相比上次的冒泡排序法,插入排序法更符合人类的习惯. 所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了.插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去. 1 2 3 4 5 6 7 8 9 10 11 12  function insertSort(&$arr){         for ($i=1; $i <</span>

我的Java开发学习之旅------&amp;gt;Java经典排序算法之插入排序

一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的任务只要看看27有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较27和53,27比53小,所以我们就交换27和53,原来的排列就变成了"27, 53, 36, 15, 69, 42 " 接下来,我们看第3个数字有没有在正确的位置.这个数字是36,它的左边数字是53,36

《算法导论(原书第3版)》一2.1 插入排序

2.1 插入排序 我们的第一个算法(插入排序)求解第1章中引入的排序问题: 输入:n个数的一个序列〈a1,a2,-,an〉. 输出:输入序列的一个排列〈a′1,a′2,-,a′n〉,满足a′1≤a′2≤-≤a′n. 我们希望排序的数也称为关键词.虽然概念上我们在排序一个序列,但是输入是以n个元素的数组的形式出现的. 本书中,我们通常将算法描述为用一种伪代码书写的程序,该伪代码在许多方面类似于C.C++.Java.Python或Pascal.如果你学过这些语言中的任何一种, 16那么在阅读我们的算

【算法导论】排序算法总结

排序算法总结         从六月初开始看算法导论,陆陆续续看了有2个月了,但实际看的时间只有半个月左右.这期间都忙着找导师.期末考试,同时还回家修养了十来天.真正专心的看算法是在离家返校后,由于没有考试和作业的烦恼,天天都沉浸在算法中,感觉效率较高.这段时间学到的东西较多,下面来总结一下:         学到的排序算法可以分为两类:比较排序.非比较排序.(这些排序算法的详细介绍及c程序实现在本文末都给出了链接,欢迎参考与指正!)         比较排序有:插入排序法.合并排序法.堆排序法

【算法导论】排序(一)

虽然久闻大名,但第一次接触算法导论,是看了网易公开课MIT的<算法导论>课,记得 第一集就讲到了 插入排序和归并排序. 几个星期前也买了算法导论这本书,准备慢慢啃~ 这星期主要在看前两 部分,除了对于讲渐进时间.递归式分析这些东西感到云里雾里的,其它的都就 感觉越看越有觉得入 迷,果然不愧是一本经典之作 好吧,开始.本文主要是用C++把书中的算法实现,以及一些笔记. 一.插入排序. 插入算法的设计使用的是增量(incremental)方法:在排好子数组A[1..j- 1]后,将 元素A[ j]

高效算法的常用技术(算法导论)

对于高效算法, 有些比较简单的技术, 如分治法, 随机化, 和递归求解技术. 这边介绍些更为复杂的技术, 动态规划, 贪心算法 当对于复杂问题设计算法时, 首先会想到使用分治法 来解决, 分而治之, 一个很有哲理性的思路, 再复杂的问题都可以不断分解到你可以轻松解决的粒度, 把所有简单问题都解决完后, 组合在一起就得到了复杂问题的解, 可以看出其中典型的递归求解的思路. 使用分治法的要求, 各个子问题是独立 的 (即不包含公共的子子问题,子问题不重叠 ). 如果子问题重叠, 用分治法就比较低效,

基本数据结构(算法导论)与python

Stack, Queue Stack是后进先出, LIFO, 队列为先进先出, FIFO 在python中两者, 都可以简单的用list实现, 进, 用append() 出, Stack用pop(), Queue用pop(0), pop的时候注意判断len(l)  对于优先队列, 要用到前面讲到的堆 链表和多重数组 这些数据结构在python中就没有存在的价值, 用list都能轻松实现 散列表 为了满足实时查询的需求而产生的数据结构, 查询复杂度的期望是O(1), 最差为O(n) 问题描述, 对

《算法导论(原书第3版)》一第一部分 基础知识

第一部分 基础知识 这一部分将引导读者开始思考算法的设计和分析问题,简单介绍算法的表达方法.将在本书中用到的一些设计策略,以及算法分析中用到的许多基本思想.本书后面的内容都是建立在这些基础知识之上的. 第1章是对算法及其在现代计算系统中地位的一个综述.本章给出了算法的定义和一些算法的例子.此外,本章还说明了算法是一项技术,就像快速的硬件.图形用户界面.面向对象系统和网络一样. 在第2章中,我们给出了书中的第一批算法,它们解决的是对n个数进行排序的问题.这些算法是用一种伪代码形式给出的,这种伪代码

asp.net中C++插入排序 折半插入排序法例子

C++插入排序 包括折半插入排序法代码,在直接插入排序,数组data用于存放待排序元素,n为待排序元素个数,同时还包括了对data数组中的元素进行希尔排序,n为该数组大小等:    代码如下 复制代码 #include <iostream> using namespace std; #include "sort.h" // 直接插入排序,数组data用于存放待排序元素,n为待排序元素个数 template<class ElemType> void InsertS