Python 双向链表 快速排序
1、创建链表:
from random import randint
class DLinkedNode(object):
def __init__(self, data=None, pre=None, post=None):
self.data = data
self.pre = pre
self.post = post
class DLinkedList(object):
def __init__(self):
self.head = DLinkedNode()
self.tail = DLinkedNode()
self.head.post = self.tail
self.tail.pre = self.head
def build(self, n):
pre = self.head
for _ in range(n):
data = randint(1, 100)
node = DLinkedNode(data, post=self.tail)
self.tail.pre = node
pre.post = node
node.pre = pre
pre = node
return self.head, self.tail
2、快速排序:
class Solution(object):
def quick_sort(self, low, high):
if not lowor not low.post:
return
if low != high:
p, q = low, high
key = p.data
while p != q:
while p != q and q.data >= key:
q = q.pre
p.data = q.data
while p != q and p.data <= key:
p = p.post
q.data = p.data
p.data = key
if low != p:
self.quick_sort(low, p.pre)
if p != high:
self.quick_sort(p.post, high)
3、测试:
h, t = DLinkedList().build(10)
curr = h
while curr.post:
print curr.post.data,
curr = curr.post
print()
while curr.pre:
print curr.pre.data,
curr = curr.pre
print() Solution().quick_sort(h.post, h.post, t.pre)
curr = h while curr.post:
print curr.post.data,
curr = curr.post
list快速排序:
import random
class Solution(object):
def quick_sort(self, a, left, right):
if left >= right: return
pivot = self.partition(a, left, right)
self.quick_sort(a, left, pivot-1)
self.quick_sort(a, pivot+1, right)
def partition(self, a, left, right):
index = left + 1
key = a[left]
for i in range(left+1, right+1):
if a[i] <= key:
a[i], a[index] = a[index], a[i]
index += 1
a[left], a[index-1] = a[index-1], key
return index-1
if __name__ == '__main__':
a = [random.randint(0, 100) for _ in range(10)]
print(a)
Solution().quick_sort(a, 0, len(a)-1)
print(a)
Python 双向链表 快速排序的更多相关文章
- Python与快速排序
这个算法系列主要是自己学习算法过程中动手实践一下,写这个文章作为笔记和分享个人心得,如有错误请各位提出. 注:转载请说明出处 问题提出: 将以下数据升序排列:5, 2, 8, 6, 4, 9, 7, ...
- python双向链表的实现
python双向链表和单链表类似,只不过是增加了一个指向前面一个元素的指针,下面的代码实例了python双向链表的方法 示意图: python双向链表实现代码: # -*- coding: utf-8 ...
- python实现快速排序
最近在公司的工作内容发生变化,短期内工作量变少了,这也让我有时间整理一些日常学习和工作中的收获或思路.所以申请了博客,并打算持续更新. 快速排序采用了分治的思想,基本思想是选取数组中一个数为基准数(一 ...
- python 实现快速排序
一.快排思想 快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数), 分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数, i- ...
- Python实现快速排序--数据结构
快速排序(Quick Sort) 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个元素要O(nlogn)次比较.在最坏状况下则需要O(n^2)次比较,但这种状况并不常见.事实上,快速 ...
- python实现快速排序算法
快速排序算法又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, 排序n个项目要O(nlogn)次比较.在最坏状况下则需要O(n*2) ...
- $用python实现快速排序算法
本文主要介绍用python实现基本的快速排序算法,体会一下python的快排代码可以写得多么简洁. 1. 三言两语概括算法核心思想 先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来 ...
- 【python】快速排序
快速排序思想和C++的差不多,主要是通过写排序对python的语法更加了解. # 快速排序 def qsort(arr, left, right): if left >= right: retu ...
- Python 双向链表
操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, it ...
随机推荐
- Swift,字典
1.创建(Dictionary)字典(无序的可重复) (1)指定类型 var a:Dictionary<String,String>=["a":"b" ...
- golangWEB框架gin学习之获取get参数
原文地址:http://www.niu12.com/article/40package main import ( "fmt" "github.com/gin-gonic ...
- 通过python脚本查看端口
[root@zabbix-server alertscripts]# cat check_port1.py #!/usr/bin/env python #coding:utf-8 import os, ...
- javascript字符串处理方法
字符串处理方法 1.字符串合并操作:“ + ”2.parseInt() 将数字字符串转化为整数3.parseFloat() 将数字字符串转化为小数4.split() 把一个字符串分隔成字符串组成的数组 ...
- linux导入so文件
在linux系统中,有时候会遇到so文件丢失的问题. 此时一个常用的操作是将缺失的so文件拷贝到主机上.然后设置以下环境变量来进行导入 export LD_LIBRARY_PATH=/usr/lib/ ...
- Implementing DDD Reading - Strategic Design
1. 概念篇 1.1 领域 广义上讲,领域即是一个组织所做的事情以及其中所包含的一切,也是组织的业务范围以及在其中所进行的活动.软件所讨论的领域即是这个组织的领域,应该是清晰明确的.不同的层面或粒度, ...
- react-native-storage + AsyncStorage 实现数据存储
1.组件封装 import Storage from 'react-native-storage'; import { AsyncStorage } from 'react-native'; cons ...
- Servlet基础梳理(四)
本篇说一下session和路径的问题. session: 是一种在server端保存http状态信息的方案.眼下有两种实现方式:基于Cookie或者URL重写. 基于cookie:第一次訪问serve ...
- 【Python3 爬虫】12_代理IP的使用
我们在爬取页面的时候,如果长时间使用一个网址去爬取某个网站,就会受爬去限制,此时,我们引用了代理IP,IP随时在变化,也就不会被限制了 一下是国内提供免费代理IP的地址:http://www.xici ...
- androidstudio新建项目中在布局文件中不显示title的方法
在androidstudio新建项目的时候,在布局文件里有时候会出现如下情况: 上面的标题栏非常碍眼,要想隐藏标题栏的话,可以在Manifest文件的theme标签里进行配置,自定义一个theme,加 ...