zoukankan      html  css  js  c++  java
  • 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("输入待排序数组:
    ")             #待排数组
            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("
    ")
        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("输入待排序数组:
    ")             #待排数组
            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("
    ")
        except:
            break
  • 相关阅读:
    android闹钟
    Android API : SMS短信服务处理
    Windows Mobile Web方式下载文件
    摘录的一点东西,很有感触
    Net Compact Framework 基础篇(6) Socket通信 【转】
    实例讲解.NET中资源文件的创建与使用
    如何安装Apk文件到Android模拟器
    __forceinline 关键字
    Allocate aligned memory
    linux svn安装和配置,不结合apache
  • 原文地址:https://www.cnblogs.com/raincute/p/8759117.html
Copyright © 2011-2022 走看看