标签:
最近在看博客的时候,看到一篇讲快速排序的,联想到自己什么排序都不懂,就想着弄懂这个快速排序。由于脑子不太灵光,所以花了好久才弄个大概。在这里记录下学习成果。
快速排序 我的理解就是取数组中的随便一个值,然后将比他大的都放在后面,比他小的都放在前面。然后在对前面和后面的数据进行同样的操作
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
标签:
原文地址:http://www.cnblogs.com/Iqiaoxun/p/5494647.html