快速排序:首先任意选取一个数据(通常选用数组的第一个参数)作为关键数据,然后将比它小的数放在它前面,比它大的数放在后面,这个过程称之为快速排序

def quick_sort(l):
if len(l) <= 1:
return l
left = []
right = []
base=l.pop()
for x in l:
if x <base:
left.append()
else:
right.append()
return quick_sort(left)+[base]+quick_sort(right)

七行代码实现快速排序

def quick_sort(l):
if len(l) <= 1:
return l
base = l[0]
left = [x for x in l[1:] if x < base]
right = [x for x in l[1:] if x >= base]
return kuaisu_sort(left) + [base] + kuaisu_sort(right)

冒泡排序:直观的意思就是气泡越大冒的越快

     间接的说就是响铃的两个数字先进行比较,如果两个数字的顺序不对,就进行调换


def func(ll):
num = len(ll) # num = 6
for i in range(num): # 取出每一个元素 for j in range(0, num - i - 1): if ll[j] > ll[j + 1]:
ll[j], ll[j + 1] = ll[j + 1], ll[j] ll = [5, 45, 65, 95, 3, 521] func(ll)
print(ll)
 

6行代码实现冒泡排序

def bubble_sort(l):
# 外层循环
for i in range(len(l)-1):
# 内层比较循环,j为索引
for j in range(len(l)-i -1):
if l[j]>l[j+1]:
l[j],l[j+1]=l[j+1],l[j]
return l
斐波那契数列:指一个数列从第3项开始,每一项都等于前两项之和
def fibo(nums):
n, a, b = 0, 0, 1
while n < nums:
yield b
a, b = b, a + b
n = n + 1

二分查找:将n个元素分层大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2]则找到x,算法中止,如果x<a[n/2],则只要在数组a的左半部分继续搜索x,,如果x>a[n/2],则只要在数组a的右半部搜索x.

代码如下:

def find(l,aim,start = 0,end = None):
end = len(l) if end is None else end
mid_index = (end - start)//2 + start
if start <= end:
if l[mid_index] < aim:
return find(l,aim,start =mid_index+1,end=end)
elif l[mid_index] > aim:
return find(l, aim, start=start, end=mid_index-1)
else:
return mid_index
else:
return '找不到这个值' ret= find(l,44)
print(ret)

:二分查找算法 必须处理有序的列表

python实现快速排序、冒泡的更多相关文章

  1. Python学习之---冒泡,选择,插入排序

    Python学习之---冒泡,选择,插入排序 最近学习了python基础,写一下3大排序练练手: 1 ''' 2 Created on 2013-8-23 3 4 @author: codegeek ...

  2. Python与快速排序

    这个算法系列主要是自己学习算法过程中动手实践一下,写这个文章作为笔记和分享个人心得,如有错误请各位提出. 注:转载请说明出处 问题提出: 将以下数据升序排列:5, 2, 8, 6, 4, 9, 7, ...

  3. python排序算法-冒泡和快速排序,解答阿里面试题

    ''常见的排序算法\ 插入排序/希尔排序/直接排序/堆排序 冒泡排序/快速排序/归序排序/基数排序 给定一个列表,将这个列表进行排序,要求:> 时间复杂度要小于O(n^2) 复杂度:1.时间复杂 ...

  4. python实现快速排序

    最近在公司的工作内容发生变化,短期内工作量变少了,这也让我有时间整理一些日常学习和工作中的收获或思路.所以申请了博客,并打算持续更新. 快速排序采用了分治的思想,基本思想是选取数组中一个数为基准数(一 ...

  5. python 实现快速排序

    一.快排思想 快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数), 分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数, i- ...

  6. Python实现快速排序--数据结构

    快速排序(Quick Sort) 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个元素要O(nlogn)次比较.在最坏状况下则需要O(n^2)次比较,但这种状况并不常见.事实上,快速 ...

  7. python实现快速排序算法

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

  8. 01-时间复杂度、对数器(python)、冒泡、选择、递归实质、归并、小和问题、逆序对、mid

    1.时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作. 时间复杂度为一个算法流程中,常数操作数量的指标.常用O(读作big O)来表示. 具体来说, ...

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

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

随机推荐

  1. POJ2366【二分】

    题意: 给两个序列,问两个序列中是否有两个数加起来=1e4: 思路: 直接先排序好b序列,然后枚举a序列,二分查找b序列就好了: 贴一发挫code-. //#include <bits/stdc ...

  2. Cocos2d-html5游戏开发,常用工具集合

    代码编辑器IDEWebStorm (Windows, Mac) Cocos2d-html5官方团队在用,非常优秀的工具,请大家支持正版动画编辑器 Animation EditorSpriteHelpe ...

  3. bzoj 3998: [TJOI2015]弦论【SA+二分||SAM】

    SA的话t==0直接预处理出每个后缀的不同串贡献二分即可,然后t==1就按字典序枚举后缀,然后跳右端点计算和当前后缀的前缀相同的子串个数,直到第k个 不过bzoj上会T #include<ios ...

  4. apcloud混合式开发app学习笔记

    修改图标新建项目检出到本地--------------------------1.api.ajax var loginName = $api.val($api.byId('uname')); var ...

  5. hdu1272 小希的迷宫 基础并查集

    #include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> ...

  6. The Specials Menu LightOJ - 1025

    The Specials Menu LightOJ - 1025 题意:在给定的字符串中删去一些字符,使其成为回文串(不能全部都删).求方案数. 方法:常规的区间dp.ans[i][j]表示在i到j的 ...

  7. Baker Vai LightOJ - 1071

    题意:类似传纸条 方法: 把他要求的操作(一个人来回),转化为两个人同时走,除了开始和结束位置只能走不同路,得到的分数和的最大值即可. 一开始想到要定义的状态,是两个人的x(行)和y(列)坐标.这样时 ...

  8. IIR型高斯滤波的原理及实现

    二.实现 GIMP中有IIR型高斯滤波的实现,代码位于contrast-retinex.c中,读者可自行查看.下面给出本人实现的核心代码: #include"stdafx.h" t ...

  9. Suricata的初始化脚本

    见官网 https://suricata.readthedocs.io/en/latest/initscripts.html

  10. 关于java的Long 类型到js丢失精度的问题

    写代码碰到一个bug, 现象是 后台Java返回的18位的Long类型的数据,到前台丢失了精度.  查了一下,原因是 java的Long类型是18位, 而 js的Long类型(虽然没有明确定义的Lon ...