javaScript数据结构和算法--快速排序

快速排序时最常用的排序算法,和归并排序一样也是采用分治方法,但没有把数组分割开,也是将原数组分成较小的数组。

1、从数组的中间选择一项作为主元。

2、创建两个指针,left 指向数组的第一个元素,right指向数组的最后一个元素,移动left指针直到找到第一个比主元大的数,接着再移动right指针,找到比主元小的数,交换他们,重复这个过程,直到左右指针相遇。这个过程执行完主元左边都是比主元小的数,主元的右边都是比主元大的数。划分

3、接着对划分后的两个小数组重复之前的操作,直至数组已经全部排列

快速排序的代码实现:

function QuickSort() {

    const array = [];


    this.insert = function(item) {

        array.push(item);

    }

    this.toString = function() {

        return array.join();

    }

    this.quickSort = function() {

        quick(array, 0, array.length-1);

    }

    const quick = function(array, left, right) {

        let index = 0;

        if(array.length > 1) {

            index = partition(array, left, right);

            if(left < index-1) {

                quick(array, left, index-1);

            }

            if(index < right) {

                quick(array, index, right);

            }

        }

    }

    const partition = function(array, left, right) {

        var pivot = array[Math.floor((left + right) / 2)],

            i = left,

            j = right;

        while(i <= j) {

            while(array[i] < pivot) {

                i++

            }

            while(array[j] > pivot) {

                j--;

            }

            if(i <= j) {

                swapQuickSort(array, i, j);

                i++;

                j--;

            }

        }

        return i;

    }

    const swapQuickSort = function(array, index1, index2) {

        var aux = array[index1];

        array[index1] = array[index2];

        array[index2] = aux;

    }

}

var arr = new QuickSort();

arr.insert(3);

arr.insert(13);

arr.insert(32);

arr.insert(23);

arr.insert(11);

arr.insert(8);

arr.insert(33);

arr.insert(28);

console.log(arr.toString()); // 3,13,32,23,11,8,33,28

arr.quickSort();

console.log(arr.toString());

你可能感兴趣的:(javaScript数据结构和算法--快速排序)