快速排序(Quick_Sort)
来源:互联网 发布:知乎周刊合集 编辑:程序博客网 时间:2024/06/07 12:03
我个人认为,快速排序是一个十分经典的排序方法,顾名思义,快排确实比其他普通排序算法要快,空间复杂度也不是特别高。
所谓快排,先讲一下大体上的操作,我先让待排序序列的第一个元素作为一个“哨兵”,用这个哨兵把序列分成两部分,前一部分比该哨兵的值小,后一部分比该哨兵的值要大。然后我分别对前后两个序列分别快排,也就是重复此操作。但是要完成快排还要解决一件事,就是如何用哨兵把原序列分成两个。其实分成两部分的过程就相当于对于待排序序列每次操作都在“挖空填空”,“挖空填空”是什么鬼?明白了挖空填空也就掌握了快排。首先,前面说过哨兵是第一个元素的值,这个值存在新定义的元素key中,相当于在第一个位置挖了一个空,我用left标记从起始点到left为已找到的比key小的序列,用right标记从right到末尾为比key大的序列。从后往前遍历这个序列,直到找到比key小的数,把这个位置的值挖出来,填到上一个空里,当前位置就成了新空。然后从前往后遍历数组直到找到比key大的数,停下来,把该位置的数填到上一个空里。然后再从后往前,再从前往后……,直到right<=left停止。最后把key存到最后一个空里。这就完成了一次操作。然后就像上面所说的那样,分别对前后两个序列分别快排,进行的操作的相同的。快速排序的平均时间复杂度为O(nlgn),其相对不稳定。详情见代码。
#include<cstdio> #define maxn 1000+10 void Swap(int &a, int &b) { int x = a; a = b; b = x; } int Quick_Sort(int a[], int left, int right)//用到了递归{ if(left < right) { int i = left, j = right, key = a[left]; while(i < j) { while(i<j && a[j]>=key)//从后往前找,直到找到比key小的数 j--; if(i < j) a[i++] = a[j];//填空 while(i<j && a[i]<=key)//从前往后找,直到找到比key大的数 i++; if(i < j) a[j--] = a[i];// 填空 } a[i] = key; Quick_Sort(a, left, i-1); Quick_Sort(a, i+1, right); }} int main() { int num[maxn]; int n; scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%d", &num[i]); } Quick_Sort(num, 0, n); printf("%d", num[0]); for(int i = 1; i < n; i++) { printf(" %d", num[i]); } printf("\n"); return 0; }
1 0
- 快速排序quick_sort
- 快速排序Quick_Sort
- 快速排序(Quick_Sort)
- 排序——快速排序(quick_sort)
- 经典排序算法 - 快速排序Quick_sort
- quick_sort(快速排序)c语言实现
- 快速排序的简单实现(Quick_Sort)
- 基于随机数作为基数的快速排序算法 quick_sort
- 快速排序quick_sort(python的两种实现方式)
- 排序 quick_sort 快排 算法 随机函数 rand() 快速排序的随机化版本
- 排序算法之快速排序<Quick_Sort>及其C语言代码实现
- Quick_Sort
- quick_sort
- quick_sort
- quick_sort
- quick_sort
- quick_sort
- QUICK_SORT
- Linux 添加Nginx 到 service 启动 (完整篇)
- STM32 自定义延时函数
- C++大牛blog地址
- com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 1
- ionic自定义图标
- 快速排序(Quick_Sort)
- ELK + Redis 日志分析系统 -学习第一天
- HTTPS 升级指南
- 微信分享域名防屏蔽 防拦截网址系统 免费实时查询域名是否被微信拦截实时检测微信屏蔽域名api
- linux操作系统管理
- ora-47995 如何在windows环境下禁用Database Vault
- maven 配置报错 JAVA_HOME not found
- HTC Vive初体验 简单场景的搭建 基本的输入检测
- 利用手机基站获取位置