排序算法之快速排序

快速排序的主要思想:从一组数中首先任选一个数作为关键值,通过一次排序将小于和大于关键值的数据分成独立的两部分;再按这样的方法对这两部分数据分别进行快速排序,直至成有序数组。

快速排序的时间复杂度最好为O(nlogn), 最坏为O(n2), 平均时间复杂度为O(nlogn)。

快速排序是一种不稳定的排序算法。

在快速排序中用到了递归,这个需要好好理解。


C代码:

//快速排序, 按从小到大排序
void quick_sort(int array[], int left, int right) {
    if(left > right) return;

    int i = left; //将数组的左侧位置赋值给i
    int j = right; //将数组的右侧位置赋值给j
    int key = array[left]; //将数组起始位置的数作为关键值

    while (i < j) {
        //从数组的右侧开始寻找小于key的位置
        while (i < j && key < array[j]) {
            j--;
        }
        //交换j所在位置小于key的值
        array[i] = array[j];

        //从数组的基侧开始寻找大于key的位置
        while (i < j && key >= array[i]) {
            i++;
        }
        //交换i所在位置大于key的值
        array[j] = array[i];
    }

    //将key值归位
    array[i] = key;
    quick_sort(array, left, i-1); //对左侧进行快速排序
    quick_sort(array, i+1, right); //对右侧厚街快速排序
}


Python:

def quickSort(array, left, right):
    if array is None:
        return

    if left > right:
        return

    i = left
    j = right
    key = array[left]

    while i<j:
        while i<j and key < array[j]:
            j-=1
        array[i] = array[j]

        while i<j and key > array[i]:
            i+=1
        array[j] = array[i]

    array[i] = key
    quickSort(array, left, i-1)
    quickSort(array, i+1, right)

PHP:

function quickSort(array &$array, $left, $right) {
    if($left > $right) return;

    $i = $left;
    $j = $right;
    $key = $array[$left];

    while ($i < $j) {
        while ($i < $j && $key < $array[$j] ) {
            $j--;
        }
        $array[$i] = $array[$j];

        while ($i < $j && $key > $array[$i]) {
            $i++;
        }
        $array[$j] = $array[$i];
    }

    $array[$i] = $key;
    quickSort($array, $left, $i-1);
    quickSort($array, $i+1, $right);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值