def kp(arr, i, j):
if i<j: #i=j时意味着一边只剩单个数据
base = kpgc(arr, i, j)
kp(arr, i, base-1) #kp(arr, i, base)也可以,相当于把base放进去重新排了一遍,但是由于base大于左边的,没什么影响
kp(arr, base+1, j) def kpgc(arr, i, j):
base = arr[i] #第一个数字作为基准数字
while i < j:
if arr[j] >= base: #当活动指针j指向数据大于或等于基准数字时,该数据未发生交叉,放右边,
j -= 1 #活动指针同时像左移
if arr[j] < base: #当活动指针j指向数据小于基准数字时,该数据发生交叉,
arr[i] = arr[j] #指向数据放左边(此时arr[i]值已被赋给base)
i += 1 #i指针向右移
arr[j] = arr[i] #为了使活动指针一直在j处,直接将i处值赋到j指针处
arr[i] = base #将基准数字放至被分两组之间
return i 将基准数字所处的索引(即位置)返回 arr = [1,3,7,8,5,6,3,4]
kp(arr,0,len(arr)-1)
print(arr)

快排算法简述:

1,先从一组数字中任意取一个基准数字(我们以第一个数字为基准数字),将剩下数字以下列方式排在基准数字两侧,左/右侧数字全小/大于基准数字

方式:除基准数字之外,指针i指向第一个数字位置,指针j指向最后一个数字位置,活动指针最开始指向j,

若r[j]大于或等于基准数字,则放于基准数字右侧,j指针左移,活动指针仍在j处,

若小于,则放于左侧,发生交叉位置互换,此时活动指针移到i处(活动指针在哪则比较哪个数字)

2,再将基准数字两侧数字分别重复1做法直到每侧都为一个数字

python的实现

主要靠递归

为了减少活动指针移动的麻烦,这里使用将i位置的值传送到j处

ps:所写都是学习笔记,非原创,但理解,不知道为什么代码老是在上面

快速排序算法简述及python的实现的更多相关文章

  1. 快速排序算法回顾 (Python实现)

    #这个也是快速排序-------------------------------------------------- def qsort(list): if list==[]: return [] ...

  2. python实现快速排序算法

    快速排序算法又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, 排序n个项目要O(nlogn)次比较.在最坏状况下则需要O(n*2) ...

  3. $用python实现快速排序算法

    本文主要介绍用python实现基本的快速排序算法,体会一下python的快排代码可以写得多么简洁. 1. 三言两语概括算法核心思想 先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来 ...

  4. 使用Python实现的4种快速排序算法

    快速排序算法,总体来说就是选一个基准值,把小于基准值的分一拨,把大于基准值的分到另一拨,然后递归. 有区别的是,分区算法有差异,最直接的是,选个基准值,定义两个列表(小值分区less和大值分区grea ...

  5. C/C++程序基础 (九)排序算法简述

    排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...

  6. Algorithms - Quicksort - 快速排序算法

    相关概念 快速排序法 Quicksort 也是一个分治思想的算法. 对一个子数组 A[p: r] 进行快速排序的三步分治过程: 1, 分解. 将数组 A[p : r] 被划分为两个子数组(可能为空) ...

  7. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  8. C# 集合扩展快速排序算法

    /// <summary> /// 对集合进行排序,如 /// List<Person> users=new List<Person>(){.......} /// ...

  9. PHP描述冒泡排序和快速排序算法

    使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...

随机推荐

  1. 学习MySQL这一篇就够了

    MySQL 第一章 数据库概述 1.1.数据库的好处 将数据持久化到本地 提供结构化查询功能 1.2.数据库的常见概念 DB:数据库,存储数据的仓库 DBS:数据库管理系统,又称为数据库软件或者数据库 ...

  2. Python while 循环中使用 else 语句

    Python while 循环中使用 else 语句: else:表示 while 中的语句正常执行完,然后执行 else 语句的部分. 示例: # while 判断条件: # 一行语句 或 多行语句 ...

  3. 2019 HL SC day1

    今天讲的是图论大体上分为:有向图的强连通分量,有向图的完全图:竞赛图,无向图的的割点,割边,点双联通分量,变双联通分量以及圆方树 2-sat问题 支配树等等. 大体上都知道是些什么东西 但是仍需要写一 ...

  4. electron开发 - mac关闭和隐藏窗口

    针对mac平台的app let willQuitApp = false; // 控制退出方式 mainWindow.on('close', (e) => { if (willQuitApp) { ...

  5. ios 富文本 加颜色 删除线

    UILabel *valueL = [JAppViewTools getLabel:CGRectMake(JFWidth(15), CGRectGetMaxY(proName.frame)+JFWid ...

  6. 028_go语言中的超时处理

    代码演示 package main import "fmt" import "time" func main() { c1 := make(chan strin ...

  7. Html视频播放同时获取当前帧下的图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 微信公众号添加word文件

    微信公众号添加word文件的教程 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众 ...

  9. VMWare虚拟机问题总结

    windows7提示:在该系统上全局禁用了虚拟打印功能,不会为该虚拟机启用此功能,虚拟设备:'seria10'将断开连接. 解决:打开虚拟机前选择    编辑-->首选项-->设备--&g ...

  10. 编程与算法(一)、C语言实现二分法(方程近似解)

    一.二分法 假设有这样一个函数f(x) 函数与x轴有一个交点(也就是f(a)*f(b)<0,a<b),现在我们要求这个点的x值,也就是方程f(x)=0的一个实根 直接解显然不合适,那么接下 ...