【数据结构第七周】排序(上)

1、简单排序

void Bubble_Sort( ElemenType A[], int N)
{
	for ( P = N-1; P >= 0 ; P--)
	{
		flag = 0;
		for (i = 0; i < P; ++i)
		{
			if (A[i] > A[i+1])
			{
				Swap(A[i],A[i+1]);
				flag = 1;
			}
		}
		if (flag == 0)
		{
			break;
		}
	}
}

最好情况:顺序T = O( N )

最坏情况:逆序 T = O( N^2 )

2、插入排序

void Insertion_Sort( ElementType A[], int N)
{
	for ( P = 1; P < N ; ++P)
	{
		Tmp = A[P];
		for (i = P; i > 0 && A[i-1] > Tmp; --i)
		{
			A[i] = A[i-1];
		}
		A[i] = Tmp;

	}
}

最好情况:顺序T = O( N )

最坏情况:逆序 T = O( N^2 )

定理:任意N个不同元素组成的序列平均具有 N ( N - 1 ) / 4 个逆序对。

定理:任何仅以交换相邻两元素来排序的算 法,其平均时间复杂度为 Ω ( N^2 ) 。

要提高算法效率,我们必须每次消去不止1个逆序对!每次交换相隔较远的2个元素!

  

时间: 2024-08-04 23:17:26

【数据结构第七周】排序(上)的相关文章

数据结构(七)排序---希尔排序

图解排序算法(二)之希尔排序 定义 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 基本有序:小的关键字基本在前面,大的基本在后面,不大不小的基本在中间 基本思想 简单

20165305 苏振龙《Java程序设计》第七&#183;周课上测试补做

第十一章 ?如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中. ?如果想要加装主线程,就要创建 Thread 实例,要启动额外的主线程就是调用 Thread 实例的 start() 方法. ?主线程会从main()方法开始执行,直到main()方法结束后停滞JVM.如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完run()方法才终止JVM.如果一个Thead被表示为Daemon线程,在所有的非Daem

数据结构(七)排序---排序知识点总结

回顾:排序分类 (一)插入类 直接插入排序 折半插入排序 希尔排序 本质还是插入排序 (二)交换类 冒泡排序 快速排序 (三)选择类 简单选择排序 堆排序 (四)归并类 归并排序 一:复杂度总结 (一).时间复杂度 1.平均情况下:快些排队(快希排堆) 在平均情况下,快速排序,希尔排序,归并排序,堆排序的时间复杂度都是O(nlog2n),其他都是O(n2) 2.最坏情况下 快速排序的时间复杂度为O(n2),其他的和平均情况下相同 (二).空间复杂度 快速排序是O(log2n),归并排序是O(n)

IP第七周(上)

局域网的优点: 1.具有较高的数据传输率(通常为1-20Mbps,高速局域网可达100Mbps):2.具有较低的误码率,一般在10-8到10-11之间:3.具有较低的时延:4.可支持的工作站数可达几千个,各工作站间地位平等而非主从关系:5.支持多种媒体访问协议(令牌环.令牌总线和 CSMA/CD):6.能进行广播(一站发所有站收)或组播(一站发一组站收). 局域网的缺点: 1.覆盖的地理范围较小,一般为 10 m-10 km(如一幢办公楼,一个企业内等),通常为一个单位所拥有:2.通常多个站共享

数据结构第七周

20172333 2018-2019-1 《程序设计与数据结构》第七周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第七周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十一章-二叉查找树 一.二叉查找树的概念及相关方法 ①思路:二叉查找树与普通的二叉树的区别类似于有序链表与无序链表的差别,二叉查找树因为实现了Comparable接口的类型的对象,所以该二叉树在添加数据到树中的时候就会自动排序,将大于根节点的数据放在右结点,反之则保存在左结点.这样排序好的二叉树方便查找所以叫二叉查找树. ②方法: public inte

20172332 2017-2018-2 《程序设计与数据结构》第七周学习总结

20172332 2017-2018-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 第九章继承 1.创建子类. 子类与父类的关系.子类是父类的其中一种. 派生操作在子类中加保留字extends实现. 子类的实例化并不依赖于父类的实例化. 2.protected修饰符.(为了让子类能够访问并且不违反封装性原则) 父类中的变量和方法被声明为protected可见性时,子类就可以使用. UML图中,protected成员前加#. 父类的构造方法,子类不能继承(除非用super引用).

20172328《程序设计与数据结构》第七周学习总结

学号20172328<程序设计与数据结构>第七周学习总结 第九章教材学习内容总结 1.继承的概念: 继承是在父类和子类之间建立一种"是"的关系. 用于派生新类的原始类称为父类.超类或基类,被派生出的类就称为子类或者亚类. 2.继承具有单向性.java中用extends来表示新类由现有类派生. 3.protected修饰符:当变量声明为protected可见性时,子类就可以引用它,并且使父类保持了一定的封装性. (在UML图中,用#表示protected可见性.) 4.sup

20172314 2017-2018-2 《程序设计与数据结构》第七周学习总结

20172314 2017-2018-2 <程序设计与数据结构>第七周学习总结 教材学习内容总结 创建子类: 继承就是从现有类派生新类的过程,通过在子类的声明头中写public class 子类名 extends 父类名;来实现. 特别注意: 子类的实例化并不依赖于父类的实例化. 继承具有单向性,父类不能引用子类中声明的变量和方法. 构造方法不会继承. protected修饰符: 父类中的公共方法可以在子类中通过名称访问,若子类想访问其私有方法,那么父类的方法就必须声明为protected可见