基础算法之快速排序

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

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

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

原文地址:https://www.cnblogs.com/Iqiaoxun/p/5494647.html