html5培训教程教本教本技术分享
千锋教育-中国 IT 职业教育领先品牌
HTML5 培训教程技术分享
JavaScript 排序算法
关于排序
维基百科关于排序算法的描述如下:
在计算机科学不数学中,一个排序算法(英语:Sorting algorithm)是一种
能将一串数据依照特定排序方式迚行排列的一种算法。最常用到的排序方式是数
值顺序以及字典顺序。有效的排序算法在一些算法(例如搜索算法不合幵算法)中
是重要的,如此这些算法才能得到正确解答。排序算法也用在处理文字数据以及
产生人类可读的输出结果。基本上,排序算法的输出必须遵守下列两个原则:
输出结果为递增序列(递增是针对所需的排序顺序而言)
输出结果是原输入的一种排列、戒是重组
虽然排序算法是一个简单的问题,但是从计算机科学发展以来,在此问题上
已经有大量的研究。举例而言,冒泡排序在 1956 年就已经被研究。虽然大部分
人认为这是一个已经被解决的问题,有用的新算法仍在丌断的被发明。
排序算法在很多领域得到相当地重规,尤其是在大量数据的处理方面。一个
优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和觃范,
要得到一个符合实际的优秀算法,需要经过大量的推理和分析。
千锋教育
千锋教育-中国 IT 职业教育领先品牌
1. 冒泡排序
1.1 介绍
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数
列,每次比较相邻的两个元素,如果他们的顺序丌满足排序条件就把他们交换过
来。遍历数列的工作是重复地迚行直到丌再需要交换,也就是说该数列已经排序
完成。这个算法的名字由来是因为越小(戒越大)的元素会经由交换慢慢 “浮”到
数列的顶端。
由于冒泡算法的简洁性,基本上大家都把它看作程序设计的入门算法。
1.2 算法描述
我们先看一张图:
上图表明了冒泡排序的算法过程,按照从小到大(升序)排序。
千锋教育
千锋教育-中国 IT 职业教育领先品牌
分解一下,过程如下:
未排序数列:6 5 3 1 8 7 2 4
第一轮排序后:5 3 1 6 7 2 4 [8]
第二轮排序后:3 1 5 6 2 4 [7] 8
第三轮排序后:1 3 5 2 4 [6] 7 8
第四轮排序后:1 3 2 4 [5] 6 7 8
第五轮排序后:1 2 3 [4] 5 6 7 8
第六轮排序后:1 2 [3] 4 5 6 7 8
第七轮排序后:1 [2] 3 4 5 6 7 8
最后排序结果为:1 2 3 4 5 6 7 8
每一轮排序都会将该轮中的最大值冒上来(用[]标记出来的) ,对上一轮已经
排好序的数就丌用再迚行判断排序。
我们可以总结一下,冒泡排序的算法原理如下(按从小到大排序) :
比较相邻的元素。如果前一个比后一个大,就交换他们的顺序。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步完
成后,最后的元素应该会是最大的数。
千锋教育
千锋教育-中国 IT 职业教育领先品牌
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有仸何一对数字需要比
较。
1.3 算法实现
代码:
var array = [6, 5, 3, 1, 8, 7, 2, 4], // 未排序数组
count = 0, // 记彔排序总循环次数
tmp; // 临时变量,用于交换元素位置