快速
排序是对冒泡排序的一种改进。行程将两部分排序的数据到
独立的,所有的数据都比另一部分数据是一小部分,然后根据数据的两部分的
方法进行快速排序,排序的过程可以进行递归,最终实现数据
转换成一个有序序列。
假定要排序的数组是一个{ 0 }…{ },首先选择任何数据(通常是第一个数组数)作为基准数据,然后把所有较小的数放在前面,所有较大的数字都放在它后面。这个过程被称为快速排序,
值得注意的是,快速排序不是一种稳定的排序算法,也就是说,在算法结束时,多个相同值的相对
位置可能会发生变化。
一种快速排序算法:
1)将两个变量
设置为低,高,排序开始:低= 0,高= n-1;
2)以第一个数组元素作为基准数据,将值赋给基,即,基={ 0 };
3)从高开始
搜索前进,也就是说,然后开始向前搜索(高-),找到第一个小于基数的值,{ { },然后交换{高}和{低};
4)从低开始向后搜索,即从前向向后搜索(低+搜索),查找第一个大于基的{ },然后交换{低}和{高};
5)重复第三,第四步直到低=高;
复制代码代码如下所示:
函数分区(元素,低,高){
第一个元素的左侧作为
默认的引用元素
var =元素{ { };
而(低<高){
从文章中向前搜索,直到找到比引用元素小的元素,然后交换。
虽然(低=基本)高-;
无功swap1 =元素{低} { } =元素;元素低{高} { } = swap1元素高;
通过下一个搜索,直到找到元素,而不是引用元素,然后交换。
当(低高度<元素{低} =基础)低+;
无功swap2 =元素{低} { } =元素;元素低{高} { } = swap2元素高;
}
返回作为分割和位置的元素的基位置。
收益低;
}
函数排序(元素,低,高){
如果(低<高){
序列被划分为序列分割,一个分成两个,位置,在序列值小于分裂位置之前,在分裂位置大于序列之后。
无功partitionpos =分区(元素、低、高);
继续排序在递归序列之前
排序(元素、0、partitionpos-1);
递归排序的序列为
排序(元素、partitionpos + 1,高);
}
}
var元素= { 3, 1, 5、7, 2, 4、9, 6, 10、8 };
console.log(在:+元素);
排序(元素、0元素。length-1);
console.log(':' +元素);
效率:
时间复杂度:最好的:O(Nlog2N),最差的:O(n ^ 2),平均O(Nlog2N)。
空间复杂度:O(Nlog2N)。
稳定性:不稳定。