您的位置:首页 > 理论基础 > 数据结构算法

基础算法之快速排序

2016-05-15 09:50 260 查看
最近在看博客的时候,看到一篇讲快速排序的,联想到自己什么排序都不懂,就想着弄懂这个快速排序。由于脑子不太灵光,所以花了好久才弄个大概。在这里记录下学习成果。

快速排序 我的理解就是取数组中的随便一个值,然后将比他大的都放在后面,比他小的都放在前面。然后在对前面和后面的数据进行同样的操作

1.假如有个数组,如果随便取数据,那么就取第一个。



即第一个为”7“

①定义一个值,j,为数组的长度-1,现在是7。从j的位置开始向前找(j>=i),找到第一个小于7(即 j = 7的时候)的值,然后将这个位置的值赋为 7 所在的位置,即第一个

即现在的数组为,



②定义一个值,i,默认为0.然后从 i 的位置开始向后找(i<=j),找到第一个大于7(即 i = 4 的时候)的值,然后将这个值赋给给 j 位置

现在的数组为



③ 再从j(j现在的是为7)的位置向前找(j>=i),找到第一个小于7的值的位置,但是当 j = i = 4 的时候,发现并没有找到。此时就将第一个值,7 放在 j = i =4 的位置

第一遍排序的数组为



④ 如果数据比较多,重复1,2步骤。

⑤ 然后用递归,排序 0~3,5~7

⑥ 用js排序的代码是

function quickSort(arr){
if(!arr.length) return arr;
var i=0;
var j=arr.length-1;
var x = arr[0];
while(i<j){

while(arr[j]>=x&&i<j){
j--;
}
arr[i] = arr[j];
//arr[i]一定是 <= x 否则出现重复数据,会无限死循环。
while(arr[i]<=x&&i<j){
i++;
}
arr[j] = arr[i];
}
if(i==j){
arr[i] = x;
}

return quickSort(arr.slice(0,i)).concat([x],quickSort(arr.slice(j+1,arr.length)));
}


调用方法

var arr = [7,4,5,6,9,88,66,3];

console.info(quickSort(arr));


最后输出



参见:

1. http://www.cnblogs.com/foreverking/articles/2234225.html

2. http://blog.csdn.net/morewindows/article/details/6684558

3. http://ahalei.blog.51cto.com/4767671/1365285
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: