• Python排序算法


    不觉已经有半年没写了,时间真是容易荒废,这半年过了个春节,去拉萨旅行。本职工作也很忙,没有开展系统的学习和总结。

    今年开始静下心来从基础开始学习,主要分为三部分,算法、线性代数、概率统计。

    首先学习算法,用Python语言实现,主要是为了了解其中的思想,毕竟现成的轮子很多了。接下来学习线性代数和概率统计,主要通过日本的那两本书学习,编程实现方面从数值分析开始学习,也许要用到MATLAB。

    算法,学习的书籍是《python算法教程》,涵盖的知识比较全,缺点是需要有一定的基础,我是先看了这本书,又看了《程序员的数学》(这个看起来太轻松了),然后对里面的思想有了感性的认识,但是具体到算法,还是很难写出来的,所以想把书中涉及到的问题,代码,都自己实现一遍,作为复习。

    先从最简单的排序开始,可以从头撸到尾,也可以反过来,可以写成递归,也可以写成循环。

    1. 从头撸到尾,就是选出小的,放到最前面。

    递归

     1 def sort_f(seq,i):
     2     if i==0:
     3         return
     4     sort_f(seq,i-1)
     5     j=i
     6     while j>0 and seq[j-1]>seq[j]:
     7         seq[j],seq[j-1]=seq[j-1],seq[j]
     8         j-=1
     9 
    10 seq = [9,8,7,6,5,4,3,2,1]
    11 
    12 -------------------------------------------------------
    13 
    14 >>> sort_f(seq,len(seq)-1)
    15 >>> seq
    16 [1, 2, 3, 4, 5, 6, 7, 8, 9]

    循环

    def sort_f2(seq):
        for i in range(len(seq)):
            for j in range(i,len(seq)):
                if seq[j]<seq[i]:
                    seq[i],seq[j]=seq[j],seq[i]

    2.从尾撸到头,就是选出最大的,放到最后

    递归

    def sort_e(seq,i):
        if i==0:
            return
        sort_e(seq,i-1)
        j = i
        while j>0 and seq[j]<seq[j-1]:
            seq[j],seq[j-1]=seq[j-1],seq[j]
            j-=1

    递归或者这样写

    def sort_ee(seq,i):
        if i==0:
            return
        maxj=i
        for j in range(i):
            if seq[j]>seq[maxj]:
                maxj=j
        seq[i],seq[maxj]=seq[maxj],seq[i]
        sort_ee(seq,i-1)

     循环

    def sort_e2(seq):
        i=len(seq)-1
        while i>0:
            for j in range(i):
                if seq[j]>seq[i]:
                    seq[i],seq[j]=seq[j],seq[i]
            i-=1

    还有一些其它好玩的排序算法

    3.侏儒排序

    def gnomesort(seq):
        i=0
        while i<len(seq):
            if i==0 or seq[i-1]<seq[i]:
                i+=1
            else:
                seq[i-1],seq[i]=seq[i],seq[i-1]
                i-=1

    4.归并排序

    def mergesort(seq):
        mid = len(seq)//2
        lft = seq[:mid]
        rgt = seq[mid:]
        if len(lft)>1: lft = mergesort(lft)
        if len(rgt)>1: rgt = mergesort(rgt)
        res=[]
        while lft and rgt:
            if lft[-1]>=rgt[-1]:
                res.append(lft.pop())
            else:
                res.append(rgt.pop())
        res.reverse()
        return (lft or rgt) + res
  • 相关阅读:
    使用 adb 调用 ActivityManager
    shell编程学习
    ActivityInstrumentationTestCase2 和 ActivityUnitTestCase
    安装python的selenium webdriver库
    Ruby selenium-webdriver 测试笔记(一)
    android自动化框架简要剖析(一):运行原理+基本框架
    android自动化框架简要剖析(二):Instrumentation+junit.framework.TestCase
    adb使用手册
    最近常用到的adb命令
    adb无法启动,处理方式:卸载360手机助手
  • 原文地址:https://www.cnblogs.com/wrajj/p/5643249.html
Copyright © 2020-2023  润新知