首页 > 代码库 > Partition算法及Partition算法用于快速排序
Partition算法及Partition算法用于快速排序
JavaScript简单方便,所以用JavaScript实现,可以在Chrome控制台下观察运行结果。主要实现Partition算法,比如输入为
var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
partition(array, 0, 8);
那么按照array[0]即4进行划分,结果为 [3, 2, 1, 4, 6, 8, 9, 7, 5] .
?1. [代码][JavaScript]代码
// 先来看Partition算法,Partition算法是快速排序的基础
<script type="text/javascript">
// 划分算法
function partition(array, p, r) {
if(p < 0 || r < 0 || p >= r || r > array.length-1)
return;
var i = p;
var pivot = array[i];
for(var j = p+1; j <= r; j++) {
if(array[j] < pivot) {
i++;
var temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
// 交换array[i]和array[p]
var temp = array[p];
array[p] = array[i];
array[i] = temp;
return i;
}
var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
partition(array, 0, 8);
console.log(array);
</script>
2. [代码][JavaScript]代码
// 基于上面的Partition算法,获得下面的快速排序算法
<script type="text/javascript">
// 划分算法
function partition(array, p, r) {
if(p < 0 || r < 0 || p >= r || r > array.length-1)
return;http://www.huiyi8.com/clxgt/?
var i = p;窗帘效果图
var pivot = array[i];
for(var j = p+1; j <= r; j++) {
if(array[j] < pivot) {
i++;
var temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
// 交换array[i]和array[p]
var temp = array[p];
array[p] = array[i];
array[i] = temp;
return i;
}
function quickSort(array, p, q) {
if(p > q || p < 0 || q < 0 || q > array.length-1)
return;
if(p==q) // 递归终止条件
return;
var mid = partition(array, p, q);
quickSort(array, p, mid-1);
quickSort(array, mid+1, q);
}
var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
quickSort(array, 0, 8);
console.dir(array);
</script>
?