js冒泡排序和快速排序實現原理和方法

面試經常遇到這個問題,所以整理下,以便理解。

經常用到的排序方法有兩種,冒泡排序和快速排序。

1.先說快速排序

原理:每一次比較相鄰兩個數的大小,通過第一輪循環排序,找到最大值放到後面,第二輪找到二大值放後面。

代碼實現:

sort(arr: Array<any>) {
        for(let i = 0; i<arr.length;i++) {
            for(let j = 0;j<arr.length-i-1;j++){
                let tmp = arr[j];
                if(arr[j] > arr[j+1]){
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        return arr;
    }

比如說執行[19,49,89,5,8,34,1,5,63]這個數組,經過第一輪循環會把89取出來放在最後面,然後再對前面的數據進行第二輪循環,會拿到63,依次類推。

注:如果需要把數組遞減排序,把上面代碼中的arr[j]>arr[j+1]改爲小於符號即可。

2.冒泡排序

原理:取一箇中間值,通過這個之間值和數組中的樹相比,比它小的放左邊,比它大的放右邊,再依次遞歸左側和右側的數組,以此達到排序目的。

代碼實現:

quickSort(arr:Array<any>):Array<any> {
        if( arr.length < 1) {
            return  arr;
        }
        let num = Math.floor(arr.length/2);
                let middle = arr.splice(num,1)[0];
        let leftArr = [];
        let rightArr = [];
        for(let i = 0;i < arr.length; i++) {
            if (middle > arr[i]) {
                leftArr.push(arr[i]);
            } else {
                rightArr.push(arr[i]);
            }
        }
        return this.quickSort(leftArr).concat([middle],this.quickSort(rightArr));
    }

同理,如果要得到一個遞減的數組 把middel>arr[i]中的大於改爲小於即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章