快速排序的递归写法

来源:互联网 发布:de beers 知乎 编辑:程序博客网 时间:2024/05/16 19:22
//*****************************快速排序(递归)****************************
//递归思想:单趟来说,begin找比key大的,end找比key小的,当各自都找到的时候,
//          若begin比end小,则交换两个数据,然后继续找,当再找到的时候,如果
//          begin比end大,则比较a[begin]和key的值,若a[begin]大于key,说明
//          a[begin]的位置应该是key的位置,则交换,然后以key左边和右边分别进
//          行相同操作,否则,key的位置不变

intPartSort(int*a,intleft,intright)
{
                intkey =a[right];
                intbegin =left;
                intend =right- 1;
                while(begin < end)
                {
                                while(begin < end&&a[begin] <= key)
                                                ++begin;
                                while(begin < end&&a[end] >= key)
                                                --end;
                                if(begin < end)
                                {
                                                swap(a[begin],a[end]);
                                }
                }
                if(a[begin]>a[right])
                {
                                swap(a[begin],a[right]);
                                returnbegin;
                }
                else
                                returnright;
}

voidQuickSort(int*a,intleft,intright)
{
                assert(a);
                if(left>=right)
                                return;
                intmid = PartSort(a,left,right);

                QuickSort(a,left, mid - 1);
                QuickSort(a, mid + 1,right);
}

voidQuickSortTest()
{
                   //int arr[] = { 2, 0, 4, 9, 3, 6, 8, 7, 1, 5 };
                   intarr[] = { 2, 5, 4, 9, 3, 5, 8, 7, 1, 5 };
                                int_size =sizeof(arr) /sizeof(arr[0]);
                                QuickSort(arr, 0, _size - 1);
                                Print(arr, _size);
}

0 0
原创粉丝点击