重温经典排序算法之快速排序

您所在的位置:网站首页 用c语言实现快速排序算法 重温经典排序算法之快速排序

重温经典排序算法之快速排序

2023-12-21 04:55| 来源: 网络整理| 查看: 265

目录 1.快速排序原理2.算法性能分析(1)时间复杂度(2)算法稳定性 3.图解分析4.C/C++实现

1.快速排序原理

对于要排序的数组,首先任意选取一个数据(通常为首元素)作为关键数据,将序列中所有比该元素小的元素都放到它的左边,将所有比它大的元素都放到它的右边,再对左右两边分别用同样的方法直到每一个待处理的序列长度为1,排序结束。

2.算法性能分析 (1)时间复杂度

a.最好情况的时间复杂度:每次划分所选择的关键数据均为所在序列的中位数,则经过logn趟划分即可得到长度为1的子序列,此时的时间复杂度为 O ( n l o g 2 n ) O(nlog_2n) O(nlog2​n) b.最坏情况的时间复杂度:每次划分所选择的关键数据均为所在序列的最大或最小,则需要经过n趟划分才能得到长度为1的子序列,此时的时间复杂度为 O ( n 2 ) O(n^2) O(n2) 平均时间复杂度为 O ( n l o g 2 n ) O(nlog_2n) O(nlog2​n)

(2)算法稳定性

若一个序列为(3(1),8,2,9,1,3(2)),则经过第一趟(3(2),1,2,3(1),9,8),此时两个相同数的相对位置就发生了变化,因此快速排序算法是一种不稳定的排序算法。

3.图解分析

原始序列为[3,5,8,2,9,1] 第一趟排序的图解如下: 在这里插入图片描述 第一趟排序将该序列分为两个子序列[1,2]和[8,9,5],接着按相同的方法将两个子序列进行排序; 第二趟排序之后的结果为[1,2,3,5,8,9],该序列已经为有序序列,排序结束。

4.C/C++实现 #include using namespace std; void QuickSort(int a[],int low,int high) { if(low>=high) return;//此时已经完成排序,直接返回 int i = low; int j = high; int key = a[low]; while(i int a[] = {3,5,8,2,9,1}; int num = 6; QuickSort(a,0,num-1); for(int i = 0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3