快速排序对于一个合格的程序员来说都是基础,不管你工作中会不会用到,它的思想都是很值得我们学习的。我就是由于对它的思想掌握不是很透彻死在TX二面,往事不要再提,吃一堑长一智,趁还来来得及补救加油吧!
快排的思想其实说起来也不是很难,我这里就简单说一下。而且这篇东西并不是讲算法的,只是随手写了个go语言版的,放在这里便于自己整理而已。
从小到大···从大到小自己反过来就行了
1、从数组中选取一个数,称它为标准数吧;
2、将数组中其他的数,比标准数小的移到标准数的左边,比校准数大的移到标准数的右边;
3、分治数组,就是将数组以标准数分两个数组再进行1、2步操作。
如果还想更详细了解它的细节的话,参考这篇博客,讲得很通俗
http://blog.csdn.net/morewindows/article/details/6684558
我下面的代码也是参考这篇博客的风格的。就酱···上代码
func adjustArray(array []int, left, right int) {
if left < right {
i, j, x := left, right, array[left]
for i < j {
for i < j && array[j] >= x {
j--
}
if i < j {
array[i] = array[j]
i++
}
for i < j && array[i] < x {
i++
}
if i < j {
array[j] = array[i]
j--
}
}
array[i] = x
adjustArray(array, left, i-1)
adjustArray(array, i+1, right)
}
}
func quickSort(array []int) {
adjustArray(array, 0, len(array)-1)
}