算法学习(排序三)快速排序

快速排序和归并排序一样,都用到了递归的方法,具体做法是先选取一个数为关键数据(一般选择第一个数),将数组中小于该数的放在左侧,大于该数的放在右侧;排序完成后对左右两个部分进一步的做如上操作

/**
 快速排序,指定一个位置,经过排序后,是该位置的数的左边全部是小于该数,邮编全部是大于该数

 @param array 需要排序的数组
 @param left 左边坐标
 @param right 右边坐标
 */
void quickSort (int *array, int left, int right)
{
    //TODO 1.当左边坐标大于右边坐标是,代表该区间内已经排序完毕
    if (left >= right)
        return;

    //TODO 2.添加辅助参数,key是关键数据,用来进行对比,一般选择第一个
    int low = left;
    int height = right;
    int key = array[left];

    //TODO 3.开始遍历,左右两边索引往中间移动
    while (low < height)
    {
        //TODO 4.右侧移动,直到小于key的为止,将其放在low的为止
        while (low < height && array[height] >= key)
            height--;

        array[low] = array[height];

        //TODO 5.左侧移动,直到大于key的为止,将其放在low的位置
        while (low < height && array[low] <= key)
            low++;

        array[height] = array[low];
    }

    //TODO 5.最后将保存的key放在low处,此时,在key的左边的都是小于key的数,右边的都是大于key的数
    array[low] = key;

    //TODO 6.将左侧和右侧继续排序
    quickSort(array, left, low - 1);
    quickSort(array, low + 1, right);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值