Python 实现快速排序和随机快速排序

直接上代码:

#快速排序
#coding: utf-8
def quicksort(a,left,right):
    if(left<right):
        mid = partition(a,left,right)
        quicksort(a,left,mid-1)
        quicksort(a,mid+1,right)

def partition(a,left,right):
    x = a[right]
    i = left-1                       #初始i指向一个空,保证0到i都小于等于 x
    for j in range(left,right):      #j用来寻找比x小的,找到就和i+1交换,保证i之前的都小于等于x
        if(a[j]<=x):
            i = i+1
            a[i],a[j] = a[j],a[i]
    a[i+1],a[right] = a[right],a[i+1] #0到i 都小于等于x ,所以x的最终位置就是i+1
    return i+1

while(True):
    try:
        s = input("输入待排序数组:\n")             #待排数组
        l =s.split()
        a = [int(t) for t in l]
        quicksort(a,0,len(a)-1)
        print ("排序后:")
        for item in a:
            print(item,end=‘ ‘)
        print("\n")
    except:
        break

随机快速排序:

#随机快速排序
#coding: utf-8
import random
def random_quicksort(a,left,right):
    if(left<right):
        mid = random_partition(a,left,right)
        random_quicksort(a,left,mid-1)
        random_quicksort(a,mid+1,right)

def random_partition(a,left,right):
    t = random.randint(left,right)     #生成[left,right]之间的一个随机数
    a[t],a[right] = a[right],a[t]
    x = a[right]
    i = left-1                         #初始i指向一个空,保证0到i都小于等于 x
    for j in range(left,right):        #j用来寻找比x小的,找到就和i+1交换,保证i之前的都小于等于x
        if(a[j]<=x):
            i = i+1
            a[i],a[j] = a[j],a[i]
    a[i+1],a[right] = a[right],a[i+1]  #0到i 都小于等于x ,所以x的最终位置就是i+1
    return i+1

while(True):
    try:
        s = input("输入待排序数组:\n")             #待排数组
        l =s.split()
        a = [int(t) for t in l]
        random_quicksort(a,0,len(a)-1)
        print ("排序后:")
        for item in a:
            print(item,end=‘ ‘)
        print("\n")
    except:
        break

原文地址:https://www.cnblogs.com/raincute/p/8759117.html

时间: 2024-11-04 21:29:18

Python 实现快速排序和随机快速排序的相关文章

快速排序 与 随机快速排序 算法分析

快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序的优点: (1)原址排序,空间复杂度较小. (2)虽然最坏情况下(有序数组)时间复杂度为 (n*n),但是平均性能很好,期望复杂度为( nlg(n) ). 快速排序使用分治法(Divid

《github一天一道算法题》:快速排序和随机快速排序

看书.思考.写代码!!! /********************************* * [email protected] * blog: http://blog.csdn.net/hustyangju * 题目:快速排序和随机快速排序 * 思路:采用分治+原址排序,分裂函数将区间分为三个子区间:<=主元.主元和>主元区间,再在主元旁边的两个子区间递归调用排序 * 分裂函数一般将区间最后一个元素作为比较的主元,随机快排则随机选取区间内的一个元素交换到末尾作为主元 * 空间复杂度:原

【算法设计-快速排序】随机快速排序算法

1.算法流程: 但是为了减少算法因为初始数据可能已经部分按大小排序,导致算法复杂性会变成o(n2)进行了随机选择方法 在random_partition中随机产生(p,r)之间的一个数字,然后交换A[i]与A[r]这样会使得快速排序算法的复杂性得到降低. 代码实现: #include<stdio.h> #include<stdlib.h> #define DataType int void FastSort(DataType A[], int left, int right);//

快速排序/随机快速排序

快速排序是一个递归算法,重点是Partition()函数的实现过程.随机快速排序中调用Randomized_Partition(),此函数的实现只需要在Partition()的基础上前面多一个随机化和交换的过程. int Partition(int*A,int p,int r); int Randomized_Partition(int*A,int p,int r); void Quicksort(int *A,int p,int r); void Randomized_Quicksort(in

python数据结构与算法 35 快速排序

快速排序 快速排序也使用了分而治之的策略来提高性能,而且不需要额外的内存,但是这么做的代价就是,列表不是对半切分的,因而,性能上就有所下降. 快速排序选择一个数值,一般称为"轴点",虽然有很多选取轴点的方法,我们还是简单地把列表中第一个元素做为轴点了.轴点的作用是帮助把列表分为两个部分.列表完成后,轴点所在的位置叫做"切分点",从这一点上把列表分成两部分供后续调用. 图12所示,54将作为轴点.这个例子我们已经排过多次了,我们知道54在排好序后将处于现在31的位置上

Python实现排序算法之快速排序

Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它小的放到它前面,所有比它大的放到它后面,这个过程称为一趟快速排序 快速排序原理图如下: 实现 #coding=utf-8 #python实现快速排序 def quick_sort(li,start,end): if start < end: flag = li[start] print(flag)

算法导论-排序(二)快速排序、随机化快速排序

目录 1.本文介绍 2.快速排序 3.随机化快速排序 4.完整源码 5.参考资料 内容 1.本文介绍 主要内容分为两部分,一部分是介绍快速排序算法,分析其在最好.最坏以及最好最差交替出现情况下的算法效率:另一部分则是介绍随机化快排算法,以及分析其算法复杂度.最后给出c++实现代码. 2.快速排序 快速排序也是基于分治思想,首先把要排序的数组分为两份,然后再分别对分好的子数组进行快速排序.当子数组为1个元素时递归介绍,排序完成.快速排序属于“原地排序”,就是说在原有的数组内存上排序.不占用其他内存

LSH︱python实现局部敏感随机投影森林——LSHForest/sklearn(一)

关于局部敏感哈希算法,之前用R语言实现过,但是由于在R中效能太低,于是放弃用LSH来做相似性检索.学了python发现很多模块都能实现,而且通过随机投影森林让查询数据更快,觉得可以试试大规模应用在数据相似性检索+去重的场景. 私认为,文本的相似性可以分为两类:一类是机械相似性:一类是语义相似性. 机械相似性代表着,两个文本内容上的相关程度,比如"你好吗"和"你好"的相似性,纯粹代表着内容上字符是否完全共现,应用场景在:文章去重: 语义相似性代表着,两个文本语义上的相

Python简单实现产生随机位数的密码及注意事项小结

Python简单实现产生随机位数的密码 #!/usr/bin/python#coding:utf-8#产生任意位数的随机密码import random,string #导入随机数和字符串模块x=string.digits+string.letters #将数字和字母的字符串组合赋值给变量xpasswd='' #原始密码变量是空a=int(raw_input('请输入密码位数:')) #提示用户自定义密码位数,将字符串转成数字for i in range(a): #循环来实现自定义位数tmp=ra