目录
一、算法介绍
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。因其排序效率在同为O(N*logN)的几种排序方法中效率较高而受众人关注。
二、算法分析
时间复杂度:O(n2)
最优时间复杂度:O(n * logn)
平均时间复杂度:O(n * logn)
空间复杂度:根据实现的方式不同而不同
稳定性:不稳定
三、算法描述
- 在序列中选择一个元素作为“基准点”(默认选择最左边的元素)
- 将所有小于“基准点”的元素都移到左边,
所有大于“基准点”的元素都移到右边,将最后一位较小的数与基准数互换- 对“基准点”左边和右边的两个子序列,不断重复步骤 1 和 2
四、算法步骤(简单理解)
自制动态图
首先我们假定一个整型数组 a[7]={5,9,6,3,2,1,7},我们对它进行快速排序操作
1.先选择最左边的数为基准数(三角下标所指的)
2.接下来令left、right分别指向最左边和最右边的数值(l与r)
3.r从右往左,找到比基准数小的数值
4.l从左往右,找到比基准数大的数值
5.交换两值
6.r继续向左前进,重复3-5步
7.当r与l同时指向一个数值时,将基准数与该数值交换
8.分成左右两个子序列,重复1-8步
9.至此为止,快速排序已完成
五、主体代码
以下是c语言实现的主体代码
#include <stdio.h>
void sort3(int array[], int low, int high);
void swap(int array[], int low, int high);
int main() {
int array[6] = {
0}