实现快速排序的关键在于:先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边。
javascript 代码实现:
function partition(data,length,start,end){
if(data == null || length <= 0 || start <0 || end >= length){
alert("invalid parameters");
}
let index = Math.floor(Math.random()*(end-start)+start);
let temp = data[end];
data[end] = data[index];
data[index] = temp;
let small = start - 1;
for(index = start;index<end;++index){
if(data[index]<data[end]){
++small;
if(small!=index){
temp = data[index];
data[index] = data[small];
data[small] = temp;
}
}
}
++small;
temp = data[small];
data[small] = data[end];
data[end] = temp;
return small;
}
接下来,可以使用递归的思路对每次选择的数字的左右两边进行排序,利用递归实现快速排序的参考代码:
function quickSort(data,length,start,end) {
if(start==end){
return;
}
let index = partition(data,length,start,end);
if(index>start){
quickSort(data,length,start,length-1);
}
if(index<end){
quickSort(data,length,index+1,end);
}
}