快速排序图解( 三 )


三向快速排序代码:
公共静态无效排序(可比[] arr) {
intn=arr.length
sort(arr,0,n1);
}
私有静态空排序(可比[] arr,intl,intr) {
//对于小规模数组,使用插入排序
if(rl=15){
insertionsort.sort(arr,l,r);
返回;
}
//在arr[l…r]范围内随机选择一个值作为校准点轴心
swap(arr,l,(int)(math. random*(rl^ 1))l);
可比v=arr[l];
intlt=l;//arr[l1…lt] v
intgt=r1;//arr[gt…r] v
inti=l1;//arr[lt1…i)=v
while(igt) {
if(arr[i] 。compareto(v) 0)
swap(arr,i,lt1);
i;
lt 。
} elseif(arr[i] 。compareto(v) 0)
互换(arr,i,gt1);
gt;
} else{ //arr[i]==v
i;
}
}
互换(arr,l,lt);
排序(arr,l,lt1);
sort(arr,gt,r);
}
摘要
本文介绍了快速排序、快速排序的优化、双向快速排序和三向快速排序 。
为了快速排序,我们需要选择合适的校准点,使校准点的两侧平衡;当在快速排序中递归到小数组时,我们可以用插入排序来代替递归,以减少不必要的开销 。
对于双向快速排序和三向快速排序,我们在数组中使用了大量重复的元素 。
比较后,建议jdk底部的排序使用插入排序双路快速排序
【快速排序图解】合并和排序的组合 。