Python随笔-快排

def swap(arr, i, j):
    temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp

def part(arr, beg, end):
    if end - beg <= 0:
        return beg
    v = arr[beg]
    idx = beg + 1
    for x in range(beg+1, end+1):
        if(arr[x] < v):
            swap(arr, idx, x)
            idx += 1
    swap(arr, idx-1, beg)
    return idx-1

def sort(arr, beg, end):
    if end - beg <= 0:
        return
    i = part(arr, beg, end)
    sort(arr, beg, i)
    sort(arr, i+1, end)

arr = [5, 10, 6, 7, 1, 2, 3, 0, 3, 10, 99, 22, 33, 23, 45]
sort(arr, 0, len(arr)-1)
print(arr)

原文地址:https://www.cnblogs.com/wrbxdj/p/9378678.html

时间: 2024-08-03 10:49:33

Python随笔-快排的相关文章

Python的快排应有的样子

快排算法 ? 简单来说就是定一个位置然后,然后把比它小的数放左边,比他大的数放右边,这显然是一个递归的定义,根据这个思路很容易可以写出快排的代码 ? 快排是我学ACM路上第一个让我记住的代码,印象很深刻,以前学的是Pascal,写这个要写好长一串,但是因为和归并排序比起来还算短的,也就背下来了.好奇的我点开百科看python的快排代码,就看到了如下代码: #quick sort def quickSort(L, low, high): i = low j = high if i >= j: re

Python 实现快排

快速排序简介快速排序,又称划分交换排序,从无序队列中挑取一个元素,把无序队列分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.简单来说:挑元素.划分组.分组重复前两步 快速排序原理示意图通过上面对快速排序的简介,我们知道了,快速排序主要包括以下两方面:挑元素划分组.整体递归分组挑元素划分组示意图: 特点:1.因为是无序队列,所以位置可以随机挑2.临时划分一个空间,存放我们挑

觉得python写快排真的简单易懂

记录下自己学习python的学习路 快速排序: def mySort(l): if len(l)<2:#如果列表中只有一个元素就会返回 return l num=l[0]#拿一个元素作为参考元素 startl=[x for x in l[1:] if x <= num ]#使用列表推导式把小于等于参考元素的放入新的列表 endl=[x for x in l[1:] if x > num ]#使用列表推导式把大于参考元素的放入新的列表 #使用递归的方式将排序好的元素拼接为新的列表返回 re

【Python实现快排】 -- 2019-08-09 12:12:36

原文: http://106.13.73.98/__/117/ 挖坑法思路: 取一个元素p(第一个元素),使元素p归位: 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p: 递归完成排序. Python代码示例: lst = [5, 7, 4, 3, 1, 2, 9, 8] def quick_sort(d, l, r): if l < r: m = partition(d, l, r) quick_sort(d, l, m - 1) quick_sort(d, m + 1, r)

【Python实现快排】 &#202465;

原文: http://blog.gqylpy.com/gqy/342 " 挖坑法思路: 取一个元素p(第一个元素),使元素p归位: 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p: 递归完成排序. Python代码示例: lst = [5, 7, 4, 3, 1, 2, 9, 8] def quick_sort(d, l, r): if l < r: m = partition(d, l, r) quick_sort(d, l, m - 1) quick_sort(d, m

python 冒泡和快排,不多说【无聊】

1 #-*-coding:utf8-*- 2 import random 3 a=[] 4 b=[] 5 def init_array(): 6 for i in range(10000): 7 v = random.randint(1,10000) 8 a.append(v) 9 b.append(v) 10 11 #冒泡 12 def sort_array(a): 13 for i in range(len(a)): 14 for j in range(i+1,len(a)): 15 if

Python实现排序(冒泡、快排、归并)

Thomas H.Cormen 的<算法导论>上介绍的几个经典排序算法的Python实现. 1.冒泡排序: 简单的两重循环遍历,使最小(最大)的值不断地往上升(下沉)而实现的排序,算法时间为O(n2). 代码如下: 1 def up_sort(a): 2 # 冒泡排序 3 4 a_length = len(a) 5 while True: 6 i = 0 7 j = 1 8 9 while True: 10 if a[i] > a[j]: 11 a[i], a[j] = a[j], a[

python 版 quicksort 快排

今天看了下苹果xml 解析,写了个小demo 心想还是 在博客上写点东西吧,毕竟很久很久都没有上来了 先上个效果图把 接下来 看下 工程目录图吧 本demo 分两种解析模式,一是苹果自带的, 首先先看下苹果自带的吧,工程文件为 NoteXMLParser 文件 ,另一种解析模式 是 NotesTBXMLParser文件 NoteXMLParser.h 文件代码如下 : // // NoteXMLParser.h // TestXML // // Created by choni on 14-5-

用python写个快排

快排过程比较简单就直接上代码了: 1 #!/usr/bin/python3 2 3 def quik_sort(L, left, right): 4 if left <= right: 5 key = L[left] 6 i = left 7 j = right 8 while i < j: 9 while i < j and key <= L[j]: 10 j -= 1 11 L[i] = L[j] 12 while i < j and L[i] <= key: 13