zoukankan      html  css  js  c++  java
  • python排序(冒泡, 快速)

    之前用java时学习的一些基础算法,今天在python上也研究下。

    1. 冒泡排序

    算法步骤

      50   30   70  90 10

      1)50 跟 30 比不用交换。

      2)步数+1, 30 跟70比交换, 50 70 30 90 10。

      3)步数+1, 30跟90比交换, 50 70 90 30 10。

      4)步数+1, 30跟10比不用交换, 50 70 90 30 10.

      即:一次比较, 排出最小一个元素

    再来张图看看(网上找的)

    # -*- coding: UTF-8 -*-
    import random
    import datetime
    def bubble_sort(array): for i in range(len(array)): for j in range(i,len(array)): if array[j] < array[i]: tmp = array[j] array[j] = array[i] array[i] = tmp def getRandomList(): array = [] for i in range(1, 10000): array.append(i) random.shuffle(array)

      return array if __name__ == '__main__': array = getRandomList() t1 = datetime.datetime.now() bubble_sort(array) t2 = datetime.datetime.now() print t2 - t1 ########## 0:00:12.298000 [Finished in 12.5s]

    2. 快速排序:

      

      推荐看看这个视频:http://v.youku.com/v_show/id_XMzMyODk4NTQ4.html

    def getRandomList():
        array = []
        for i in range(1, 10000):
            array.append(i)
        random.shuffle(array)
    
        return array
    
    def subSort(array,low,high):
        key = array[low]
        while low < high:
            while low < high and array[high] >= key:
                high -= 1
            while low < high and array[high] < key:
                array[low] = array[high]
                low += 1
                array[high] = array[low]
        array[low] = key
        return low
    
    
    def quickSort(array,low,high):
         if low < high:
            index = subSort(array,low,high)
            quickSort(array,low,index )
            quickSort(array,index+1,high)
    
    if __name__ == '__main__':
        array = getRandomList()
        t1 = datetime.datetime.now()
        # bubble_sort(array)
        quickSort(array, 0, len(array)-1)
        t2 = datetime.datetime.now()
        print t2 - t1
    #######
    0:00:00.047000
    [Finished in 0.2s]

    从结果看两个速度差距不是一般大啊!!!!

  • 相关阅读:
    sql server 复制数据库
    sql server 修改数据库名、修改逻辑文件名、修改数据库物理文件名
    前端工具集合
    如何写一个日历组件
    封装一个通过class获取元素的方法--我的JS原生库(1)
    关于复选框选中状态的判断
    42种常见的浏览器兼容性问题大汇总(转载)
    CSS样式命名整理(非原创)
    setTimeout和setInterval实现滚动轮播中,清除定时器的思考
    注册登陆拖拽验证(1)
  • 原文地址:https://www.cnblogs.com/gcm688/p/5224367.html
Copyright © 2011-2022 走看看