快速排序
1.确定基准点(pivot)
这里设置为array[0]
2.设置left=0
right=(sizeog(array)/sizeof(array[0]))-1
保证left<right情况下进行如下操作
3.从右到左依次与pivot进行比较,先从右边开始right递减找到比pivot小的放到array[0]的位置上
4.从左到右依次与pivot进行比较,left递增找到比pivot大的数房子刚才array[right]的位置上
并使right--
5.重复上面步骤,直至left=right
把pivot放在array[left]//也可以是left可以换成right
位置上
此时左边的都比pivot少
右边的知都比pivot大
完成第一次排序
6.再对左右进行一次递归
递归条件看right的数字是否大于1
代码如下
qsort( float A[], int N )
{
int i=0,j=N-1;//N为数组长度
float pivot = A[0];
if(N>1)
{
while(i<j)
{
while(i<j&&A[j]>pivot)
j--;
if(i<j)
A[i++] = A[j];
while(i<j&&A[i]<pivot)
i++;
if(i<j)
A[j--] = A[i];
}
A[i] = pivot;
qsort(A,i);
qsort(A+i+1,N-i-1);
}
return A[(N/2)];
}
最后
qsort(A,i);A数组不过排序的数值只有左边i个了,从0到i-1
qsort(A+i+1,N-i-1);A+i+1相当于从A[i+1]的一个内部数组排序,数组长度由原来的N
少了i+1个数,所以是N-i-1;