#数据结构#-快速排序

基本思想:快速排序是从待排记录中选出一个“基准”,将待排记录分成两个子待排记录(左边子待排记录的都小于这个基准,右边子待排记录都大于这个基准),一直重复这个过程,直到待排记录变成有序的记录为止。


算法步骤:                  

1 .从数列中挑出一个元素,称为 “基准”(pivot);

2. 重新排序数列。所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面。完成前面的操作之后,基准放在数列的中间位置(也是该记录元素的最终位置);

3. 重复2操作,将分别对左右两个子待排记录进行快速排序,直到待排子记录个数是零或一,也就是处于有序状态。


代码
//while 实现的快速排序
void quicksort2(int arr[], int left, int right)
{
    int i=left + 1;
    int j = right;


    while (i<j)
    {
        while (i<j)
        {
            //找到最靠近左边大于 关键字 的位置
            while (arr[i]<=arr[left]&&i<right)
            {
                i++;
            }

            //找到最靠近右边边小于 关键字 的位置
            while (arr[j]>=arr[left]&&j>left)
            {
                j--;
            }

            if (i<j)
            {
                swap(&arr[i], &arr[j]);
            }

        }


        swap(&arr[left], &arr[j]);//将关键字插入到合适的位置
        // 如 5 1 3 7 6->3 1 5 7 6
        quicksort2(arr, left, j - 1);     //处理左边 3 1
        quicksort2(arr, j + 1, right);//处理右边 7 6
    }
}

结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值