排序---交换排序---快速排序Quick Sort

来源:互联网 发布:软件测试经典书籍 编辑:程序博客网 时间:2024/06/05 06:54

                                   快速排序---Quick Sort

      基本思路:

      分治思想,将一个大的数据序列分割成两个子序列,然后再依次将两个子序列划分成更小的两个,这里就能很明显的看出快速排序的时间复杂度是与2 的对数有关。

      划分的标准是找到序列中数据居中的值做为key值,怎么取得key值,就可以判断出算法的快慢来。通常比较简单的情况是将序列的第一个值做为key值。然后通过交换的思路,将序列划分为左、右两个子序列来,划分后的结果是左边的子序列的值都比key值小,右边的子序列的值都比key值大,key值居于中间。

      算法实现:

    int A[] = {49,38,65,97,76,13,27,49}
void qsort(int left, int right)
{
    int pos = A[left];
    int empty = left; /*每次都是先把最左边的取出来*/
    int p = left, q = right;
    int mid = 0;
    /*将pos放在中间,左边的比它小,右边的比它大*/
    while(p<q)
    {
/*先做右边,把右边比pos小的放在pos的位置上,因为开始是把最左边的空出来了*/
while(p<q)
{
if (pos>A[q])
{
A[empty]=A[q]
empty = q;/*更改空位置*/
break;
}
else
{
q--;
}
}
       
    while(p<q)
{
if(pos<A[p])
{
A[empty]=A[p]
empty=p;
break;
}
else
{
p++;
}
}
    }
    A[empty]=pos;
    mid=empty;


    if (left<q)
    {
qsort(left,q-1);
    }
    if(p<right)
    {
qsort(p+1,right);
    }
     
}

	
				
		
原创粉丝点击