您的位置:首页 > Web前端 > JavaScript

快速排序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)

<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