快速排序

快速排序思想:數組

  找一個元素做爲基準,而後對數組進行分區,使基準左邊的數據比基準值小,基準右邊的數據比基準值大,如此做爲基準的元素調整到排序後的正確位置。而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程遞歸進行,使得數據正確排序。ui

 

之前經常使用的方法:spa

function quicksort(arr, low, high)
{
    low = typeof low == 'number' ? low : 0;
    high = typeof high == 'number' ? high : arr.length-1;

    var left = low,
        right = high;

    if(low < high){
        var key = arr[left];
        while(left < right)
        {
            while(left < right && arr[right] >= key)
            {
                right--;
            }
            arr[left] = arr[right];
            while(left < right && arr[left] <= key)
            {
                left++;
            }
            arr[right] = arr[left];    
        }
        arr[left] = key;
        quicksort(arr, low, left-1);
        quicksort(arr, left+1, high);
    }
    return arr;
}

//var arr = quicksort([1,3,4,2]);

 

看了阮一峯老師的博客後,發現用JS數組的特性來寫特別方便,也容易理解:code

function quicksort(arr)
{
    if (arr.length == 0)
        return [];
 
    var left = new Array();
    var right = new Array();
    var pivot = arr[0];
 
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] < pivot) {
           left.push(arr[i]);
        } else {
           right.push(arr[i]);
        }
    }
 
    return quicksort(left).concat(pivot, quicksort(right));
}

//var arr = quicksort([1,3,4,2]);

 

 上面兩種都是爲了將小的數據移到基準左側,大的數據移到基準右側,只是使用的方法不一樣。blog

相關文章
相關標籤/搜索