【python 資料結構 1:排序】氣泡排序和快速排序
功能:用python實現氣泡排序和快速排序,並且進行簡單測試。
<span style="font-size:18px;">#!/bin/env python #-*- coding:utf8 -*- import random import datetime import copy #快速排序 def quicksort(data, low = 0, high = None): if high == None: high = len(data) - 1 if low < high: s, i, j = data[low], low, high while i < j: while i < j and data[j] >= s: j = j - 1 if i < j: data[i] = data[j] i = i + 1 while i < j and data[i] <= s: i = i + 1 if i < j: data[j] = data[i] j = j - 1 data[i] = s quicksort(data, low, i - 1) quicksort(data, i + 1, high) #氣泡排序 def bubblesort(data): for i in range(len(data) - 1, 1, -1): for j in range(0, i): if data[j] > data[j + 1]: data[j], data[j + 1] = data[j + 1], data[j] #效能測試 def sort_perfmon(sortfunc, data): sort_data = copy.deepcopy(data) t1 = datetime.datetime.now() sortfunc(sort_data) t2 = datetime.datetime.now() print sortfunc.__name__, t2 - t1 #print sort_data #定義一個隨機陣列 data = [random.randint(0, 65536) for i in range(2000)] #print data sort_perfmon(quicksort, data) sort_perfmon(bubblesort, data) </span>
相關推薦
【python 資料結構 1:排序】氣泡排序和快速排序
功能:用python實現氣泡排序和快速排序,並且進行簡單測試。 <span style="font-size:18px;">#!/bin/env python #-*- coding:utf8 -*- import random import datetim
【python資料結構與演算法】幾種排序演算法:氣泡排序、快速排序
以下排序演算法,預設的排序結果是從小到大。 一.氣泡排序: 1.氣泡排序思想:越大的元素,就像越大的氣泡。最大的氣泡才能夠浮到最高的位置。 具體來說,即,氣泡排序有兩層迴圈,外層迴圈控制每一輪排序中操作元素的個數——氣泡排序每一輪都會找到遍歷到的元素的最大值,並把它放在最後,下一輪排序時
【python資料結構與演算法】LeetCode:反轉連結串列
題目連結:https://leetcode-cn.com/problems/reverse-linked-list/ 介紹一下反轉連結串列的思路: 首先,先明確一下輸入:輸入為一個連結串列的頭結點head 具體步驟: 先判斷頭結點或頭結點的next屬性head.next 是否為
【Python資料結構與演算法】Array(陣列)
Array(陣列) 下圖為6個元素 [15, 6, 12, 9, 13, 20] 的陣列: 陣列是一個盛有單一型別固定數量值的容器類 以0開始的索引 陣列的元素帶編號,編號從0開始,如上圖中,元素6的位置1;而元素15的位置為0 元素的位
【Python資料結構與演算法】【劍指offer】順時針列印矩陣
題目描述與連結: https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-intervi
【python資料結構與演算法】【劍指offer】字串的排列
題目描述: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba,且要求輸出字串按序排列,不可重複 思路: 其實排列問題的思路很簡單,有點類似《劍指offer
【python資料結構與演算法】連結串列——連結串列中環的入口節點、兩個連結串列的第一個公共節點(相交連結串列)
如題,這類問題在LeetCode上和劍指offer上總共有這些涉及: LeetCode:141,142,160 劍指offer:兩個連結串列的第一個公共節點(預設是無環單鏈表)、連結串列中環的入口節點 補充:兩個未知是否有環的單鏈表第一個公共節點 我直接敘述第三個問題,
【Python資料結構與演算法】陣列和列表
2018-7-17 北京暴雨 一週多沒更新了,總是往醫院跑。 根據Pegasus Wang 大佬的教程,邊學邊做 抽象資料型別ADT Abstract Data Type,抽象資料型別,我們在組合已有的資料結構來實現一種新的資料型別, ADT 定義了型別
【C#資料結構-從零開始】單鏈表
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp8 {
資料結構1:認識資料結構與演算法
程式 + 文件 = 軟體演算法 + 資料結構 = 程式資料結構與演算法的理論基礎離散數學中的圖論、集合論和關係論等。資料結構課程的內容來源於圖論、作業系統、編譯系統、編碼理論及檢索與排序技術等。1.什麼是資料結構?非數值型程式設計中資料的組織方式及其處理的演算法資料結構的三個
【“BattenSnake”資料結構課程設計總結】
“BattenSnake”資料結構課程設計總結 就在12.24日平安夜,我的資料結構課程設計“Batten Snake”歷時一個多月後終於徹底完成了。又是一個深夜,但今晚並不平凡,因為今晚是平安之夜,同樣重要的是我的課程設計勝利收官了,我的心情也是非常激動。
資料結構 筆記:線性表的本質和操作
線性表(List)的表現形式 -零個或多個數據元素組成的集合 -資料元素在位置上是有序排列的 -資料元素的個數是有限的 -資料元素的型別必須相同 線性表(List)的抽象定義 線性表是具有相同型別的n( >= 0)個數據元素的有限序列 線性表(List)的性質
氣泡排序的改進演算法和快速排序
氣泡排序的基本思想 氣泡排序和快速排序的效能分析: 平均情況 最好情況 最壞情況 穩定性 氣泡排序 o(n^2) o(n) o(n^2) 穩定 快速排序 o(n*logn
【資料結構與演算法】內部排序之四:歸併排序和快速排序(含完整原始碼)
前言 之所以把歸併排序和快速排序放在一起探討,很明顯兩者有一些相似之處:這兩種排序演算法都採用了分治的思想。下面來逐個分析其實現思想。歸併排序實現思想 歸併的含義很明顯就是將兩個或者兩個以上的有序表組合成一個新的有序表。歸併排序中一般所用到的是2-路歸併
【python】python資料結構(一)——線性表:順序表的實現
前言 這一系列文章將介紹基於python語言的資料結構,主要涉及線性表、字串、棧和佇列、二叉樹和樹、圖、字典和集合、排序等。 線性表及分類 線性表是一類元素序列的抽象,是某類元素的集合,記錄著元素之間的順序關係。python中的list和tuple都支援線性表的需要,只是t
【scala 資料結構和演算法】Scala實現:氣泡排序
主要內容: 1、氣泡排序演算法原理 2、scala實現 3、python實現 4、goland實現 氣泡排序演算法原理: 1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2、對
python資料結構和演算法【總結】
一。什麼是演算法 演算法是計算機處理資訊的本質,因為計算機程式本質上是一個演算法來告訴計算機確切的步驟來執行一個指定的任務。一般地,當演算法在處理資訊時,會從輸入裝置或資料的儲存地址讀取資料,把結果寫入輸出裝置或某個儲存地址供以後再呼叫。 通俗的來講,演算法就是你解決問題的思路。 二。演
【Java】 大話資料結構(1) 線性表之順序儲存結構
本文根據《大話資料結構》一書,實現了Java版的順序儲存結構。 順序儲存結構指的是用一段地址連續的儲存單元一次儲存線性表的資料元素,一般用一維陣列來實現。 書中的線性表抽象資料型別定義如下(第45頁): 實現程式:
【圖解資料結構】 一組動畫演示選擇排序
前言 由於LeetCode上的演算法題很多涉及到一些基礎的資料結構,為了更好的理解後續更新的一些複雜題目的動畫,推出一個新系列 -----《圖解資料結構》,主要使用動畫來描述常見的資料結構和演算法。本系列包括十大排序、堆、佇列、樹、並查集、圖等等大概幾十篇。 選擇排序 選擇排序是一種簡單直觀的排序演算法
Python 資料結構筆記(1):Python資料結構的效能
本系列部落格是閱讀《Problem Solving with Algorithms and Data Structures using Python》的筆記,原文連結 1、列表 List 索引和賦值是兩個非常常用的操作。這個兩個操作不論列表多長,它們的時間複雜