快排的方法与代码

来源:互联网 发布:免费淘宝客公众号系统 编辑:程序博客网 时间:2024/06/10 04:50

博主在写快排之前,写好了冒泡,选择,插入,觉得他们三个都属于那种很直观,操作很简单的排序,但是复杂度都很大,计算机里面,越是方法简单,复杂度就越是高,所以就看了看快排,我觉得,快排里面最麻烦的就是怎么理解它的思想,其实它的代码很少,比插入排序还要少一些,但是理解难度大一些,因为它的里面有两个递归,凡是有递归的地方一般都好麻烦,但是借助图像大家也还是可以试着理解,理解不了就先记住代码,之后多用几遍就好了。
快速排序:一种划分交换排序。它采用了一种分治的策略
1.先从数列中取出一个数(第一个数)作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
就是这么简单的两个两个步骤,然后一直找下去,直到各区间只有一个数(第一个数的的左边一定比它小,第二个数的右边一定比它大)。
这里写图片描述
这是第一次,也就是为开始的第一个数找好了自己的位置,然后再从两边开始,重复上面的操作,直到剩余一个数。
代码实现:

void quickSort(int a[], int left, int right){    int i = left;    int j = right;    int temp = a[left];    if(left >= right)    {        return;    }    while(i != j)    {        while(i < j && a[j] >= temp)        {            j --;        }        a[i] = a[j];        while(i < j && a[i] <= temp)        {            i ++;        }        a[j] = a[i];    }    a[i] = temp;    quickSort(a, left, j - 1);    quickSort(a, i + 1, right);}

具体代码就是这样的,网上说这是分治法,我觉得也是这样,他可以通过递归实现把一个数组变成两个数组,再变成更多个。

1 0
原创粉丝点击