快速排序javascript实现
2013-07-19 00:00
399 查看
(最近学习前端的一些技术,刚好有机会试试javascript实现一些简单算法)排序思想:
通过一趟排序,将待排序记录分成两个部分,其中一部分的关键字都比另一部分的关键字小。再分别对这两部分进行排序,直到整个序列有序。
以整型数组为例,一趟快速排序的方法:
待排序序列为R[low...high],取一个基准,一般为R[low]
设i=low,j=high-1
①从j向前搜索,直到j<=i或者R[j]< R[low],将R[j]与R[i]交换
②从i向后搜索,直到j<=i或者R[i]> R[low],将R[i]与R[j]交换
重复①、②步,直到j<=i,这样完成一趟排序,i就是最终基准所放置的位置
最好情况:一趟排序需要对记录进行比较约n次,则总的时间复杂度要看执行划分的次数。理想情况下,每次划分都将序列分成两个等长的部分,则时间复杂度是O(nlogn)。最坏情况下,每次划分都只将序列分成一部分,时间复杂度是O(n^2)。
平均时间复杂度是O(nlogn)
通过一趟排序,将待排序记录分成两个部分,其中一部分的关键字都比另一部分的关键字小。再分别对这两部分进行排序,直到整个序列有序。
以整型数组为例,一趟快速排序的方法:
待排序序列为R[low...high],取一个基准,一般为R[low]
设i=low,j=high-1
①从j向前搜索,直到j<=i或者R[j]< R[low],将R[j]与R[i]交换
②从i向后搜索,直到j<=i或者R[i]> R[low],将R[i]与R[j]交换
重复①、②步,直到j<=i,这样完成一趟排序,i就是最终基准所放置的位置
最好情况:一趟排序需要对记录进行比较约n次,则总的时间复杂度要看执行划分的次数。理想情况下,每次划分都将序列分成两个等长的部分,则时间复杂度是O(nlogn)。最坏情况下,每次划分都只将序列分成一部分,时间复杂度是O(n^2)。
平均时间复杂度是O(nlogn)
<html> <head> <title>QuikSort</title> <script type="text/javascript"> function quikSort(){ var dataArr =new Array(34,23,67,3,5,56,35,343,34,54,32,89); var low = 0; var high = dataArr.length-1; alert('初始数组:'+dataArr); quik(dataArr,low,high); alert('最终数组:'+dataArr); } //递归排序函数 function quik(dataArray,left,right){ if(dataArray.length>0){ if(left<right){ var middleIndex = getMiddle(dataArray,left,right); quik(dataArray,left,middleIndex-1); quik(dataArray,middleIndex+1,right); } } } //返回分界值的下标 function getMiddle(dataArr,low,high){ var tmp = dataArr[low]; while(low<high){ while(low<high&&dataArr[high]>=tmp){ high = high-1; } dataArr[low] = dataArr[high]; while(low<high&&dataArr[low]<=tmp){ low = low+1; } dataArr[high] = dataArr[low]; } dataArr[low] = tmp; return(low); } </script> </head> <body> <button id="quikSort" onClick = "quikSort()">quikSort</button> <div id="originalData"></div> </body> </html>
相关文章推荐
- javascript实现快速排序
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- 快速排序,选择排序,直接插入,冒泡排序的javascript实现
- Java&&JavaScript:实现快速排序
- javascript实现快速排序
- JavaScript实现冒泡(选择、快速)排序可视化
- javaScript实现快速排序
- 快速排序 javascript实现
- 快速排序Java实现和Javascript实现
- javascript实现快速排序
- 快速排序之JavaScript实现
- JavaScript实现冒泡排序、快速排序、插入排序
- 快速排序(Quicksort)的Javascript实现
- 算法的JavaScript实现之快速排序
- 冒泡、插入、快速、选择排序的java实现
- 啊哈!算法 - 桶排序,冒泡排序,快速排序 - PHP实现
- 快速排序之所有的c/c++的实现
- 排序算法之快速排序、归并排序(java实现)
- JAVA实现快速排序
- 快速排序、归并排序、大顶堆排序、希尔排序代码实现