partition函数就是快排的关键部分,作用是将数组划分成两部分,左边小于基数,右边大于基数

但实际上它也不仅仅用于快排,在求top(K)问题中也常常会用到。

下面介绍两种partition函数,他们都是双指针的方法,但具体会有差异:

函数一:头尾指针向中间夹

def partition(array,left,right):baseNumber = array[left]    # 基数的位置也可以随机取,避免有序列表导致最坏的复杂度while left<right:while left < right and baseNumber <= array[right]:right -= 1array[left] = array[right]  # 这一步之后不用再 left += 1,因为下面的循环第一次肯定满足while left < right and baseNumber >= array[left]:left += 1array[right] = array[left]array[left] = baseNumberreturn left

函数二:双指针都从头开始

第二种partitition函数,也是双指针,但都是从头开始,一个占坑(记录下一个要替换的位置),一个遍历,同样要选择基准值,实际上也可以以任何一个元素作为基准值,下面以第一个元素作为基准值:

def partition(array, left, right):baseNumber = array[left]x = leftfor y in range(left, right):if array[y]<baseNumber:x+=1array[x], array[y] = array[y],array[x]array[x], array[left] = array[left], array[x]return xdef quich_sort(a, left, right):if left<right:index = partitionA(a, left, right)quich_sort(a,left, index-1)quich_sort(a, index+1, right)a=[4,1,3,2,-3,6]
quich_sort(a, 0, len(a))
print(a)

这个partition函数不需要知道数组的长度,是从头到尾遍历过去的,因此也可以用于链表的快排:链表的快排和归并排序

快排的两种partition函数相关推荐

  1. 我的小快排(两种分割方法)

    今天看到微博上有人转一篇文章,题目是<你问什么写不好快排>,看看自己多长时间能把快排写出来.结果,果然20分钟没写出来,本来以为明白原理,结果实现的出现各种问题,小 bug.最终花了半个点 ...

  2. 三种快排及四种优化方式

    本文是转载文章,文章的来源:csdn博客 博主:silentsharer 文章: 三种快排及四种优化方式 博文地址:https://blog.csdn.net/hacker00011000/artic ...

  3. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  4. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  5. 两种Random函数的使用

    Java中的Random()函数 Java中存在着两种Random函数(java.lang.Math.Random以及java.util.Random): 因为在日常的使用中,常常会涉及到随机数的产生 ...

  6. arcgis两种随机数函数

    用arcgis创建模拟数据,需要用随机数函数来实现数据的随机性,在网上找了好久,都模棱两可. 经过不懈的尝试总结出了两种随机数函数 在字段计算器中(vb): rnd() 在栅格计算器中: arcgis ...

  7. 快排的三种优化方式。

    对于快排而言,其核心在partition中,主要是对于pivot的选取上,所以我们可以按以下三种方案进行优化: 1.在数组长度大于某一个阈值范围时,我们进行递归快排,当数据长度小于阈值时,我们进行插入 ...

  8. 快排及7种优化 (海贼班 胡船长 第四次直播笔记 )

    这一次直播是闲话最少的,之前的直播有好久都是在推销课程 quick sort 是leetcode 912 我一直有个困惑,就是时间复杂度上,函数调用,判断什么的,都是O(1),但是具体是多少呢,底层是 ...

  9. 快排 递归三种方式+非递归 --排序

    方法1–Hoare #include"Sort.h" void PrintArray(int* a, int n) {for (int i = 0; i < n; ++i){ ...

最新文章

  1. Mysql 源码安装
  2. ASP常用进制转化类(2,8,10,16,32,64)
  3. 计算机中丢失 MSVCR100.dll
  4. AcWing算法提高课 Level-3 第四章 高级数据结构
  5. selenium中应用问题解决
  6. 新驾考科目三有四个地方易犯错 多名教练提供对策
  7. 三同轴连接器_一种毫米波频段微带同轴转换结构
  8. html5链接mvc,LinkExtensions.ActionLink 方法 (System.Web.Mvc.Html) | Microsoft Docs
  9. 服务器指示灯详情 中兴,IBM服务器故障_指示灯介绍
  10. 鸿蒙眼镜怎么样,Babiators儿童太阳镜怎么样 Babiators儿童太阳镜测评
  11. idea java jni 调试_使用 IntelliJ IDEA 和 IntelliJ Clion 进行 JNI 开发
  12. L298电机驱动设计(含原理图)
  13. 公历转农历C语言课程设计,(只为学习)公历转农历代码以完成,请高手在此代码基础上写出个农历转公历的代码出来...
  14. Php 类似coffeescript,有什么东西像CoffeeScript for PHP吗?
  15. 测试四则运算2:Right-BICEP
  16. VISIO画出占满页面的PDF矢量图
  17. zTree单击展开节点
  18. 光是无限远服务器的花海,第21次云垂纵横计划服务器互通投票结果公告
  19. 【Typora图床设置】Typora图片上传和阿里云OSS对象存储
  20. 抖音小店另类起店方法

热门文章

  1. Stereogram(极射赤面)投影--主要用于中高纬和极区的天气图
  2. krait和kryo_java原生序列化和Kryo序列化性能比较
  3. 全球与中国蘑菇市场深度研究分析报告
  4. Android 黑科技之卸载系统应用(卸载流氓软件)
  5. Intel AMT RDK SDK SCS的概念介绍。
  6. c语言 socket send,C语言中send()函数和sendto()函数的使用方法
  7. 银行卡的卡号号段标识
  8. [SAP] PP模块 - BOM ( Bill of Material)
  9. 【DSP开发】【VS开发】MUX和DEMUX的含义
  10. 新概念二册 Lesson 45 A clear conscience问心无愧(复习被动语态+过去完成时被动语态)