关于快速排序解决办法
关于快速排序
设快速排序分解数组的函数为
int Partition(int A[], int p, int q);
请问,如果数组中的所有元素都相同,如何实现Partition可以让其返回值为(p + q)/2 ?
谢谢。
------解决方案--------------------
元素都相同,意味着每一次划分都无元素移动,那么(p+q)/2的结果取决于对pivot的选择,你选中间那个就是了
------解决方案--------------------
那数组相同的情况是你提前知道的,还是需要检测...如果提前知道的话就没有做的必要了,那么就需要检测了,检测的话,如果相同的话,直接除2就好返回好了......
------解决方案--------------------
http://mover.sinaapp.com/ 这个站点的快速排序自己看看吧,很清楚。
------解决方案--------------------
三值中值确定pivot就能返回(p+q)/2的
设快速排序分解数组的函数为
int Partition(int A[], int p, int q);
请问,如果数组中的所有元素都相同,如何实现Partition可以让其返回值为(p + q)/2 ?
谢谢。
------解决方案--------------------
元素都相同,意味着每一次划分都无元素移动,那么(p+q)/2的结果取决于对pivot的选择,你选中间那个就是了
------解决方案--------------------
那数组相同的情况是你提前知道的,还是需要检测...如果提前知道的话就没有做的必要了,那么就需要检测了,检测的话,如果相同的话,直接除2就好返回好了......
------解决方案--------------------
http://mover.sinaapp.com/ 这个站点的快速排序自己看看吧,很清楚。
------解决方案--------------------
三值中值确定pivot就能返回(p+q)/2的