这是我参与更文挑战的第5天,活动详情查看: 更文挑战
快速排序是首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,然后再按此方法对这两部分数据分别进行快速排序,让整个数据变成有序序列。
如图所示,现在有一个数组,我们想要让它用快速排序的方法排好序列,首先把4作为关键数据,然后有两个部分,一个是4左侧比它小的部分,一个是右侧比它大的部分。
如图所示,有两个指针,分为左指针和右指针,两个指针依次和关键数据4做比较
首先1和4比较,1比4小,那么1不用换位置,接着7和4比较,7比4大,也不用换位置
然后6和4比较,6比大,应该放到右边,然后8和4比较,8比4,不用换位置
然后2和4比较,2比4小,需要放到左边去
然后2和6互换位置,然后9和4比较,9比4大,需要换位置
然后3和4比较,3比4小,需要换位置
然后3和9互换位置,最后将关键数据放到这两部分的中间,然后再用同样的办法,将左右两部分的数据排序,这就是快速排序的大概思路
代码实现
var arr = [4,1,6,9,3,2,8,7];
function swap(arr,a,b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
function quickSort2(arr,begin,end){
if(begin >= end -1) return;
var left = begin;
var right = end;
do{
do left++;while(left < right && arr[left] < arr[begin]);
do right--;while(right > left && arr[right] > arr[begin]);
if(left < right) swap(arr,left,right)
} while (left < right);
var sawpPoint = left == right ? right - 1:right;
swap(arr,begin,swapPoint);
quickSort2(arr,begin,swapPoint);
quickSort2(arr,swapPoint + 1,end);
}
}
function quickSort(arr){
quickSort2(arr,0,arr.lenght);
}
quickSort(arr);
conole.log(arr);
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END