关键字 |
排序技术,排序方法、冒泡排序、归并排序、时间复杂度、空间复杂度 |
介绍 |
排序是将元素从一个集合的过程在某种秩序。例如,一个单词列表可以按照字母顺序排列或长度。可以按城市人口的列表,由地区或邮政编码。有很多很多排序算法开发和分析。这表明,排序是计算机科学的一个重要的研究领域。整理大量的物品可能需要大量的计算资源。像搜索、排序算法的效率与被处理物品的数量。对于小集合,一个复杂的排序方法可能比值得更多的麻烦。的开销可能太高了。另一方面,对于更大的集合,我们要利用尽可能多的改进。 In this paper we will discuss several sorting techniques and compare them with respect to their running time and space. |
进入具体的算法之前,我们应该考虑的操作,可用于分析排序过程。首先,它将需要比较两个值小(或大)。为了一个集合,它将需要有系统的方法来比较值是否发生故障。比较的总数将会是最常见的方法来测量过程。第二,当价值观不正确的位置对彼此,可能需要交换。这种交流是一个昂贵的操作和交流的总数也将重要的评估算法的整体效率。 |
我们进一步提出了一种融合方法可以作为内部以及外部排序技术。这种方法使用多线程的方法。多线程程序资源的最优利用,所以当有多个处理器,这样一个任务分为多个部分或部分进而并发执行。以这种方式非常有效地处理的资源。 |
实际的多任务的本质是当多个进程共享CPU等常见的处理资源。多线程多任务的想法延伸到应用程序,你可以细分特定操作在一个应用程序为单独的线程。每个线程可以并行运行。操作系统将处理时间不仅在不同的应用程序之间,而且在应用程序中的每个线程[1]。 |
冒泡排序的 |
冒泡排序,有时被称为沉没,是一个简单的排序算法,通过反复步进通过列表进行排序,比较每一对相邻物品和交换他们如果他们错误的订单。通过列表重复直到不需要互换,这表明列表排序。算法得名“泡沫”的小元素列表的顶部。因为它只使用比较操作元素,这是一个比较排序。尽管算法简单,实用太慢了。冒泡排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
3 6 12 7 4 5 11 9 |
3 6 7 12 4 5 11 9 |
3 6 7 4 12 5 11 9 |
3 67 4 5 12 11 9 |
3 5 6 7 1112 9 |
3 6 7 4 5 11 9 12(最大的没有。冒气泡的内部循环执行后一个值外循环)以这种方式执行的每个值外循环,第二大价值泡沫,直到列表排序。 |
3 64 5 7 9 11 12 |
3 4 5 6 7 9 11 12 |
重复相同的,直到没有更多的掉期交易是有可能的。每次通过第二大气泡数量下降。 |
3 6 4 7 5 9 11 12 |
3 4 5 6 7 9 11 12 |
3 4 5 6 7 9 11 12 |
3 4 5 6 7 9 11 12(不需要互换所以列表进行排序) |
冒泡排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•稳定 |
•O(1)额外的空间 |
•O (n2)比较和交换 |
•自适应:O (n)当近排序 |
算法本身,如图1所示。 |
插入排序的 |
在每个迭代中插入排序,从输入列表中删除一个元素,然后插入到正确位置的排序列表。这一过程持续进行直到没有输入元素依然存在。插入排序是建立一个元素的最终名单。插入排序时的选择问题是几乎还是小的大小排序。 |
最简单的最坏情况输入数组在相反的顺序进行排序。所有坏的情况下输入的集合包含所有的数组,其中每个元素是最小的或第二小的元素。在这些情况下内循环的每次迭代将扫描和转移整个数组的排序分段之前插入下一个元素。 |
插入排序的典型例子是手动排序扑克牌在一个特定的顺序。插入排序的平均情况是二次,这就是为什么它是不切实际的大数组进行排序。然而插入排序更快比快速排序的排序小数组。 |
插入排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
一次取一个元素- |
6 |
3个6 |
3 6 12 |
3 6 7 12(例如接卡,插入正确的位置) |
3 4 6 7 12 |
3 4 5 6 7 12 |
3 4 5 6 7 11 12 |
3 4 5 6 7 9 11 12(排序列表) |
插入排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•稳定 |
•O(1)额外的空间 |
•O (n2)比较和互换 |
•自适应:O (n)时间排序 |
•具有非常低的开销 |
算法本身,如图2所示。 |
选择排序的 |
选择排序的想法很简单:我们不断寻找下一个数组中最大(或最小)元素并将其移动到其最终位置排序的数组。假设我们想要排序的数组增加订单,即最小的元素在数组的开始和结束时的最大元素。我们首先选择最大的元素和移动指数最高的位置。 |
选择最低的元素选择排序需要扫描n个元素和n - 1比较和交换到最低位置。选择第二个元素需要扫描n - 1元素等等。这些扫描为n−1元素需要一个交换(最后一个元素已经到位)。 |
而选择排序比插入排序的数量写(O (n)互换O (n2)互换)但大大优于分而治之算法如归并排序。但插入和选择小数组类型通常更快。 |
选择排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
3 6 12 7 4 5 11 9(找到最小的在其正确的位置,并将其与6)交换- 3交换后 |
3 4 12 7 6 5 11 9(4和6)交换 |
3 4 5 6 7 12 11 9(5和12)交换 |
3 4 5 6 7 12 11 9(6与7)交换 |
3 4 5 6 7 9 11 12(9和12)交换 |
选择排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•不稳定 |
•O(1)额外的空间 |
•O (n2)比较 |
•O (n)互换 |
•不适应 |
算法本身,如图3所示。 |
快速排序的 |
快速排序是一个分而治之算法。它将一个大数组分成两个子数组,然后递归地随后的两个数组。快速排序的步骤是: |
1。选择一个元素,称为一个主,从数组中。 |
2。重新排序数组所有元素值小于主主面前,在所有元素值大于主来后(相等的值可以有较多的选择)。这个分区后,主在其最终位置。这就是所谓的分区操作。 |
3所示。递归地应用上述步骤分别赋值和较小的元素的子数组的元素以更大的值。 |
快速排序所需的空间非常少。只有O (n log n)需要额外的空间。快速排序是一种非常不稳定的排序方法。这两个相似的发生变化列表中的元素排序。 |
快速排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
6 3 12 7 4 5 11 9(找不到。小于6从右到左和交换- 6和5交换) |
5 312 7 4 6 11 9(找不到。大于6从左到右交换和交换- 6 - 12) |
5 3 6 7 4 12 11 9(重复R L - 6和4交换) |
5 3 4 7 6 12 11 9(重复L R - 6和7交换) |
3 4 5 6 7 12 11 9(6正处于正确的位置和6是主) |
重复这个子列表在左边右边是子表的6和6。继续这样做,直到列表排序。 |
快速排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•不稳定 |
•O(1)额外的空间 |
•O (n2)比较 |
•O (n)互换 |
•不适应 |
算法本身,如图4所示。 |
堆排序 |
堆数据结构数组对象,可以被视为一个完整的二叉树。在第一步堆建。树的每个节点对应于一个元素的数组存储节点中的值。完全二叉树的二叉树结构映射到数组的索引;每个数组索引代表一个节点;索引节点的父节点的左子分支,或右子分支是简单的表达式[8]。在第二步中,排序的数组是由反复删除从堆中最大的元素(堆的根),并将它插入数组中。堆堆每次切除后保持更新。一旦所有对象从堆中被删除,结果是一个数组排序。 |
堆排序可以执行到位。数组可以分为两个部分,排序数组和堆。堆排序过程需要时间O (n log n),因为调用创建堆需要时间O (n)和n - 1的每个调用删除根和维护堆需要时间O (log n)。给定序列的数字是第一次转换的形式二叉堆。堆排序的例子是图5所示。 |
堆排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•不稳定 |
•O(1)额外的空间 |
•O (n log n)的时间 |
•不适应 |
•不需要随机访问数据 |
该算法本身如图6所示。 |
归并排序的 |
归并排序也是基于分治法的范例。其最坏的运行时间的增长低于插入排序。排序(p . .r: |
1。分步骤 |
如果给定一个零个或一个元素数组,仅仅返回;它已经排序。否则,分裂[p . .r)为两个子数组(p . .问]和[q + 1 . .r)的每个包含大约一半的元素[p . .r]。也就是说,q的中点(p . .r]。 |
2。征服一步 |
征服通过递归排序两个子数组(p . .问]和[q + 1 . .r]。 |
3所示。结合步骤 |
结合元素在[p . .r)通过合并两个排序子串(p . .问]和[q + 1 . .r)变成一个有序序列。完成这一步,我们将定义一个程序合并(p, q, r)。 |
归并排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
6 312 74 511 9(每分在两个子列表) |
3 67 124 59 11(排序子列表) |
3 6 7 124 5 9 11(合并两个一次连续两个子列表) |
3 4 5 6 7 9 11 12(继续合并,直到剩下一个列表) |
归并排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•稳定 |
•O (n)额外的空间阵列(如图所示) |
•O (log n)链表的额外空间 |
•O (n log n)的时间 |
•不适应 |
•不需要随机访问数据 |
算法本身,如图7所示。 |
的基数排序 |
基数排序是有用的对于大型阵列相比,数量比较小数组的大小。这个方法是桶排序方法的一个变体。 |
这个排序适用只有当值是整数数字在一些基础。这里根据最大数量的数字给定的列表,创建基数或桶的数量。我们在每一个数字的数字从最重要的一个。我们继续以这种方式排序逐步走向最重要的一个。 |
每个分布后,我们重新重组项目照顾保护他们的订单从之前的分布。当最后一个重组的项目排序。[5] |
基数排序的属性: |
这种排序技术的属性按照时间和空间复杂性是: |
•稳定 |
•O (n + n)额外的空间阵列 |
•O (nk)时间(k是最大的数字的位数) |
•不适应 |
该算法本身如图8所示。 |
基数排序的例子:[6、7] |
原来,无序列表: |
170、45、75、90、802、66 |
排序的最低有效位(1位)为: |
24、170、90、802、2、45、75、66 |
(请注意,我们保持802 2之前,因为802发生在原始列表2之前,同样对170 & 90和45 & 75。) |
排序的下一个数字(10位)为: |
802,2,24岁,45岁,66,170,75,90 |
再次注意到802年之前2 2在前面的列表之前,是在802年。 |
排序,最重要的数字(100年代)给出: |
2,24岁,45岁,66,75,90,170,802 |
这是最后的排序列表。 |
拟议中的FUSIONSORT |
我们设计了一种新方法时,可以使用物品的数量进行排序是非常大的。它可以用作外部排序方法。该方法包括多线程的概念。 |
多线程程序的能力或者一个操作系统进程管理其使用多个用户,甚至管理多个请求相同的用户无需在电脑运行程序的多个副本。中央处理单元的硬件支持高效地执行多个线程。假设n把物品的总数在M组,M是一个偶数。这意味着我们的项目现在分成M批次,每一批的大小是或多或少相同。有可能是所有组/批处理可能没有相同数量的物品当N未必是一个偶数。 |
该方法将工作分两个阶段进行: |
阶段1: |
使用多线程,每组同时使用bubblesort方法。从每组大小是或多或少相同,每组时间排序相同。 |
阶段2: |
采取作为输入排序组两个同时使用归并排序开始结合组。这一次也可以使用多线程的概念,合并将会快速降低时间复杂度。继续合并组,直到最后整理物品。 |
在第一阶段,而不是冒泡排序可以把其他排序技术。这里自项目分成小组,然后排序在第一阶段时间复杂度是O(1)假设每组大小是< < N。 |
在第二阶段同时合并发生所以时间复杂度是O (n log n)归并排序。所以最后的复杂度是O (n log n),这种方法的例子是类似于一个节目在冒泡排序和归并排序的排序发生唯一的变化是同时每一批。 |
融合排序的例子: |
6 3 12 7 4 5 11 9(无序列表) |
6 3 12 74 5 11 9(分裂的子列表米批次如。2) |
3 6 7 12 4 5 9 11 (sublistssimultaneouly排序) |
3 6 7 12 4 5 9 11 (Msublistssimultaneouly合并) |
答:属性的融合: |
这种排序技术的属性按照时间和空间复杂性是: |
•稳定 |
•O (n)额外的空间阵列 |
•O (n log n)的时间 |
•不适应 |
•外部排序技术 |
该算法本身如图9所示。 |
的比较研究 |
之间的比较研究不同的排序技术,提出新技术如下面的选项卡。1所示。上面讨论的表显示每个排序方法以及提出了融合与比较的时间复杂性技术最好,平均和最坏情况和空间复杂性。 |
结论 |
如前所述,排序是最常见的操作之一,由计算机和程序员在不同的计算机科学和工程领域。根据应用程序的类型不同,数据的规模和性质的数据可以选择最适当的排序算法。如今当处理器速度和空间不需要妥协,我们提出的方法被证明是一个非常好的选择对于大型数据大小。 |
这个地区仍然是最巨大的实现和广泛寻求比较研究为计算机专业人士。就不会有最后一个排序的方法可以满足所有的需求普遍。 |
|
表乍一看 |
|
表1 |
|
|
数据乍一看 |
|
|
|
|
|
图1 |
图2 |
图3 |
图4 |
图5 |
|
|
|
|
图6 |
图7 |
图8 |
图9 |
|
|
引用 |
- http://www.tutorialspoint.com/
- 西摩Lipschutz,“数据结构”,麦格劳希尔教育(印度)私人有限公司9.1 - -9.27,2010页。
- Tremblay索伦森,“一个Intoduction数据结构和应用程序”,麦格劳希尔,538 - 562年,1984页。
- r·b·帕特尔与C”“专家数据结构,Khanna图书出版商,595 - 645年,2001页。
- p·h·戴夫和h·b·戴夫,“算法设计与分析”,皮尔森,407年,2007页。
- http://www.geeksforgeeks.org/radix-sort/
- http://en.wikipedia.org/wiki/Radix_sort
- http://en.wikipedia.org/wiki/Heapsort
|