var array=[19,95,10,27,8];
function QuickSort(left,right)
{
if(left>=right)
return;
var key=array[left];
while(right>left)
{
while(right>left&&array[right]>=key) right--;
array[left]=array[right];
while(right>left&&array[left]<=key) left++;
array[right]=array[left];
}
array[left]=key;
QuickSort(0,left-1);
QuickSort(left+1,array.length-1);
}
QuickSort(0,array.length-1);
document.write(array);
以上代码是实现快速排序的,但最后输出不了结果,我是了下,发现注释了QuickSort函数里调用自身递归的其中一条,就正常,不知道是为什么,大家帮忙看看是怎么回事啊
而且改了也无法输出结果
QuickSort(0,left-1);
QuickSort(left+1,array.length-1);
表示不懂
<script>
function getMedian(p,q){
var r = Math.floor((p+q)/2);
if(array[p]<array[r]){
if(array[p]>=array[q]) return p;
else{
if(array[q]>=array[r]) return r;
else return q;
}
}
else{
if(array[r]>=array[q]) return r;
else{
if(array[p]>=array[q]) return q;
else return p;
}
}
}
function partition(f,l){
var i,j,m,t,temp;
i = f;
j = l;
t = getMedian(i,j);
m = array[t];
while(i<=j){
while(j>=f && array[j]>=m){
j--;
}
while(i<=l && array[i]<m){
i++;
}
if(i<j){
temp = array[i];
array[i] = array[j];
array[j] = temp
i++;
j--;
}
}
if(i==f){
temp = array[i];
array[i] = array[t];
array[t]= temp;
i++;
}
return i;
}function quickSort(f,l){
if(f >= l) return;
var k = partition(f,l);
quickSort(f,k-1);
quickSort(k,l);
}
var array=[19,95,10,27,8];
quickSort(0,array.length-1);
document.write(array);
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript"> function Partition(arr, left, right) {
var pivokey = arr[left];
while (left < right) {
while (left < right && arr[right] > pivokey) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] < pivokey) {
left++;
}
arr[right] = arr[left];
}
arr[left] = pivokey;
return left;
}
function QuickSort(arr, left, right) {
if (left < right) {
var pivoloc = Partition(arr, left, right);
QuickSort(arr, left, pivoloc - 1);
QuickSort(arr, pivoloc + 1, right);
}
}
</script>
</head>
<body>
<script type="text/javascript">var arr = [3, 5, 6, 1, 2, 7, 8, 4]
QuickSort(arr, 0, arr.length-1);
alert(arr);</script>
</body>
</html>
QuickSort(0,left-1);
第一个参数,始终都是0,它是递归调用的。分隔后的第一个参数是变的。而你始终都是数组的第一个位置。