本文实例讲述了JavaScript实现的选择排序算法。分享给大家供大家参考,具体如下:
是人们最熟悉的比较方式,其<强>算法思想强>为:
代码如下:
& lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=皍tf - 8”比; & lt; title> JavaScript选择排序& lt;/title> & lt;/head> & lt; body> & lt;脚本type=" text/javascript祝辞 函数selectSort (num){//选择排序 var分钟;//最小值 (var外=0;outer< nums.length-1;外+ +){//外循环选中元素 min=外; (var内在=外+ 1,inner<=nums.length; + +内){ 如果(num(内部)& lt; num(分钟)){//如果内循环中元素比选中元素小 min=内部;//将其标为最小元素 }//直到每次外循环的最小元素 交换(num外,min);//最小值被调整到合适的位置 } } } 函数交换(arr, i, j){//交换位置 var temp=arr[我]; arr[我]=arr [j]; arr [j]=temp; } 函数显示(num){//显示数组 我(var=0; i< nums.length;我+ +){ 文档。写(num[我]+ '); } document . write (' & lt; br> '); } var num=[6 8 0, 6、7、4、3、5、5、10]; 显示(num);//6 8 0 5 6 7 4 3 5 10 selectSort (num); 显示(num);//0 3 4 5 6 5 6 7 9 10 & lt;/script> & lt;/body> & lt;/html> >之前分析可得,简单选择排序的时间复杂度为<强> O (n2) >强。选择排序的主要操作是进行关键字之间的比较,因此改进简单选择排序应该从如何减少比较出发,其实现实生活中就有一个很好的例子,就是比赛总的锦标赛。8个人中选出冠军其实不需要7 + 6 + 5=18场比赛,可以通过两两比较也就是11场比赛。这种方法叫做。
是一种按照锦标赛的思想进行选择排序的方法,首先对n个记录的关键字进行两两比较,然后在其中n/2个较小者之间再进行两两比较,直到找出最小关键字。可以通过一个完全二叉树来表示,由于含有n个结点的完全二叉树的深度为为log2n + 1,所以排序过程中每选择一个次小关键字仅需要为log2n次操作,所以其时间复杂度<强> O (nlog2n) >强劲,但是这种排序有一种缺点就是占用空间大。
所以我们需要介绍一种更加优秀的排序,也就是。
<强>附:强>
只需要一个记录大小的辅助空间,每个待排序的记录仅占用一个存储空间。
堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得当前无序区中选取最大(或最小)关键字的记录变得简单。我们以大跟堆为例子,排序的基本操作如下:
首先是,建堆就是不断调整堆的过程,从len2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程,从len2到0处一直调用调整堆的过程,建堆的时间复杂度为O (n)。
接下来是,调整堆在建堆和堆排序的过程中都会用的到,利用的思想是比较节点我和它的孩子节点左(i)和右(i),选出三者最大(或最小)者,如果最大(小)值不是节点我而是它的一个子节点,那么交换两个节点,然后继续递归。
然后是:<强> >强调整堆的时间复杂度为<强> O(为log2n) 强>
所以堆排序的时间复杂度为O (nlog2n)。堆排序是就地排序,其辅助空间为O(1)。但是它不稳定,(是指如果在排序的序列中,存在前后相同的两个元素的话,排序前和排序后他们的相对位置不发生变化)。下面模拟建堆的过程:
堆排序对于记录数较少的文件并不值得提倡,但是对于n较大的文件还是挺有效的。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》,《JavaScript数学运算用法总结》,《JavaScript排序算法总结》,《JavaScript遍历算法与技巧总结》,《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JavaScript实现的选择排序算法实例分析