c++快速排序代码(c++快速排序代码两种方式)

[img]

快速排序是一种高效的排序算法,它采用的是分治的方式,将一个大问题分解成若干个小问题,分别解决,最终将结果合并。快速排序的时间复杂度为O(nlogn),是目前所有排序算法中最快的之一。

以下是C语言的快速排序代码:

## 快速排序示例代码

```

#include

void quick_sort(int *arr, int left, int right){

if(left >= right){

return;

}

int i = left, j = right, pivot = arr[left];

while(i < j){

while(i < j && arr[j] >= pivot){

j--;

}

arr[i] = arr[j];

while(i < j && arr[i] <= pivot){

i++;

}

arr[j] = arr[i];

}

arr[i] = pivot;

quick_sort(arr, left, i-1);

quick_sort(arr, i+1, right);

int main(){

int arr[] = {9, 5, 8, 3, 6, 7, 1, 2, 4};

int len = sizeof(arr)/sizeof(int);

quick_sort(arr, 0, len-1);

for(int i=0; i

printf("%d ", arr[i]);

}

return 0;

```

## 代码说明

快速排序函数`quick_sort`接受一个待排序的数组`arr`和左右端点`left`和`right`,表示对数组`arr`中下标从`left`到`right`的元素进行排序。

首先判断`left`是否大于等于`right`,如果是,则表示已经排序完成,直接返回。否则,选取`arr[left]`作为基准点`pivot`,从右往左遍历,寻找第一个小于`pivot`的元素,将其赋值给`arr[i]`;然后从左往右遍历,寻找第一个大于`pivot`的元素,将其赋值给`arr[j]`,如此往复直到`i`和`j`相遇。

最后,将`pivot`赋值给`arr[i]`,此时,数组被分为两部分,左边部分的元素都小于等于`pivot`,右边部分的元素都大于等于`pivot`。接着,对左右两部分分别递归调用`quick_sort`,直到所有子问题都被解决。

在主函数`main`中,我们定义一个待排序的数组`arr`,并计算其长度`len`,然后调用`quick_sort`进行排序。最后,输出排序后的结果。

## 结语

快速排序是一种非常高效的排序算法,其时间复杂度为O(nlogn),并且常数因子比较小,实际应用中广泛使用。通过这个示例代码的介绍,我们可以更加深入地理解快速排序的实现原理。

标签列表