排序算法有很多,常见的选择、冒泡、快排等等。今天着重说一下对了快排的理解。
快排的核心思想是每次遍历选取一个中间值,这个值可以是第一个元素,也可以是最后一个元素,然后一次遍历的结果是要做到把比它小的元素都放它左边,比他大的元素都放它右边。。太啰嗦了,这个大家都知道。我就不多说了,下面结合实例说一下过程。
举例说明:假如现在有一个数组int[] a = {10,18,2,6,19,7,9}
开始排序:
第一次遍历:
假如选取a[0]也就是10为中间值的话,再取两个下标值left:0和right:6。此时a[left]=10,a[right]=9
a)先从最右边比起,a[right]=9<10,那么a[left]和a[right]互换,left和right下标值不变,数组变成9,18,2,6,19,7,10 ,换完之后立刻用a[left]比,此时left=0,right=6;
b)此时a[left]=9,a[left]<10,那么left++,变成1,a[left]=18>10,那么立刻让a[left]和a[right]互换位置,也就是a[1]和a[6]互换位置],数组变成9,10,2,6,19,7,18,此时left=1,right=6;
c)再从右边比起,a[right] = 18>10,right--,变成5,a[left] = 7<10,立刻互换a[left]和a[right]的位置,也就是a[1]和a[5]互换位置,数组变成9,7,2,6,19,10,18,此时left=1,right=5;
d)再从左边比起,a[left] = 7<10,left++,变成2,a[left] = 2<10,left++,变成3,a[left] = 6<10,left++,变成4,a[left] = 19>10,此时立刻让a[left]和a[right]互换,也就是a[4]和a[5]互换,数组变成9,7,2,6,10,19,18
d)再从右边比起,a[right]=19>10,right--,变成4,此时left=right,则第一次遍历也就结束了
在递归遍历10左边的数组和10右边的数组
也就是用上面的办法分别遍历9,7,2,6和19,18两个数组,这里就不往下介绍了。
快排好累但是真快。。。。。