您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關python實現兩個隊列的數據合并及排序的示例分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
最近數據庫學習中,體會到數據庫中大大小小的數據處理,都離不開數據算法,有效的開始理解一些算法會對某些數據庫設計中的理念會更深入的理解。
本次的問題是從兩個隊列的數據合并并進行排序開始的。
以下僅僅是假設,如果我們從數據庫中獲取的數據,并且是多線程的獲取,而后續需要將每個線程獲取的數據進行一個合并,并且查詢語句要求的是需要進行排序的,則我們在獲得了這些值后,怎么在內存里面將他們進行一個從小到大的排序。
如上圖在獲得了某些值,并且分別這些值在兩個隊列中,需要的最終的結果是將他們一次性輸出,并形成一個排序的隊列。
這里利用了python來將下面的兩個隊列進行一個合并排序輸出
arry1_copy = arry1.copy() #生成一個arry1列表一模一樣列表,并準備讓這個列表作為最后輸出的列表
每個列表中的元素都有角標,都是從0開始,這里以角標作為指明元素的標志,可以認為是指針的替代品。
這里以隊列arry2 作為數據提取的對象隊列,逐一將元素提取,和隊列1 進行對比,如果值比對比的隊列1值小,就直接插入到新加入的隊列的對比值之前,直到隊列的值2都被選擇完畢。
看似這端程序可以解決這個兩個隊列的數據重組的問題,實際上漏洞不少
問題來了,程序原封不動,直接將隊列的值的數量變化,隊列1 的值的數據個數小于隊列2的數量,我們再看,結果就變成了上圖這樣。
如何解決隊列1 比隊列2 的元素小的問題,那我們在進行程序處理前,可以對隊列1 和隊列 2 進行一個比較,那個元素多,那個就是隊列 1 。
在修改程序后,增加了一個判斷,如果隊列1 的數值數量比隊列2的數值數量小,則兩個隊列互換位置,就可以解決問題。但實際上,即使這樣解決后,還是有問題,因為隊列2的值只有一個,在下圖的位置,如果隊列2只有一個值的情況下,會觸發在新的隊列尾部,還會加入一個隊列2的值。
結果就是下面那樣,多了一個1被重新插入了一次
在此修改代碼,但實際上就算是這樣,這個程序還是有問題
#!/usr/bin/python3
# -*- coding: utf-8 -*-
arry1 = [1]
arry2 = [2,7,10,13]
if (len(arry1) > len(arry2)):
arry_copy = arry1.copy()
for i in range(0,len(arry2)):
init_1= 0
while init_1 < len(arry1):
if arry2[i] < arry_copy[init_1]:
arry_copy.insert(init_1 + i ,arry2[i])
break
else:
init_1 += 1
else:
if len(arry2) != 1:
arry_copy = arry_copy + arry2[i:]
print (arry_copy)
else:
arry2_copy = arry1.copy()
arry1_copy = arry2.copy()
arry1 = arry1_copy.copy()
arry2 = arry2_copy.copy()
arry_copy = arry1.copy()
for i in range(0, len(arry2)):
init_1 = 0
while init_1 < len(arry1):
if arry2[i] < arry_copy[init_1]:
arry_copy.insert(init_1 + i, arry2[i])
break
else:
init_1 += 1
else:
if len(arry2) != 1:
arry_copy = arry_copy + arry2[i:]
print(arry_copy)
問題在哪里,在如果兩個隊列的值是一樣的情況下,或有數據重復的情況?,所以還需要在此修改程序,發現兩個列表中的重復或包含的情況,來將其避免掉。
所以通過一段不值得一提的算法小程序,就可見要搞出一個數據庫的不容易。
上述就是小編為大家分享的python實現兩個隊列的數據合并及排序的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。