排序算法——快速排序

快速排序,可以称得上是21世纪最伟大的算法之一,它的性能也是相当不错的,它的平均时间复杂度是O(nlogn)是一种非常高效的算法,几乎我们每门语言当中的系统排序算法中都有一部分是基于快速排序算法实现的。

快速排序的思想也很简单,就是每一次,都将一个数送到它最终的位置上面,并且它前面的数都比它小,后面的数都比它大,每一轮都这样然后递归执行,最终就会实现整个数组完全有序的状态。

当然快排的优点肯定是平均性能好,但是快排对于已经比较接进完全有序的数组,会暴露出自己的问题,这时它会达到自己的最坏的性能,目前解决这种问题的方法也有很多,当然只能减少这中情况的发生,并不能避免,但在数学期望的角度上,会让它的性能更优,具体做法:

1.我们可以在快速排序一个数组之前,运行一个算法来打乱原数组
2.我们可以每次选定标准的时候,并不选择第一个数,而是随机选定一个待排序范围内的数字

我们现在就可以自己实现一个二路快速排序算法:

/**
 * Created by linSir on 17/2/10.
 */
function paration(list, l, r) {
    var first = list[l];
    var left = l;
    var right = r;
    var temp;
    while (left < right) {
        while (list[right] > first && left < right) {
            right--;
        }
        if (left < right) {
            list[left] = list[right];
            left++;
        }
        while (list[left] <= first && left < right) {
            left++;
        }
        if (left < right) {
            list[right] = list[left];
            right--;
        }
        list[left] = first;
    }
    return left;
}

function quickSort(list, l, r) {
    if (l >= r) {
        return;
    }
    var temp;
    temp = paration(list, l, r);
    console.log(temp);
    quickSort(list, l, temp - 1);
    quickSort(list, temp + 1, r);
    return list;

}


var list = [3, 1, 2, 4, 5, 6, 7];
console.log(quickSort(list, 0, 6));

结果:

运行效果图

现在我们所写的算法就是基本的快速排序算法了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 快速排序是最经典,最常用的高效排序算法之一。快排和归并排序算法一样,采用的是分治的思想。具体步骤如下: 分:从未排...
    叶孤陈阅读 2,271评论 0 2
  • 快速排序思想:1、首先在一组待排序的元素中找到一个基准数(一般用第一个)2、然后用两个游标分别指向第一(最左)和最...
    WX_WDN阅读 3,821评论 0 0
  • 快速排序是一种分治排序的算法,将数组划分为两个部分,然后分别对两个部分进行排序。在实际应用中,一个经过仔细调整的快...
    IgorNi阅读 3,068评论 0 0
  • 简介 快速排序,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,...
    歇歇阅读 3,211评论 1 6
  • 题主是个学生,因为今天星期五,学校只有一个上午的课,所以下午约了朋友一起出去玩。 跟朋友一起吃饭,逛街,玩到了晚上...
    我文笔不好阅读 5,692评论 0 0