用乙個棧實現另乙個棧的排序

2021-09-26 06:26:53 字數 965 閱讀 9040

乙個棧中元素的型別為整型,現在想將該棧從頂到底按從大到小的順序排序,只許申請乙個棧。除此之外,可以申請新的變數,但不能申請額外的資料結構。如何完成排序?

第一行輸入乙個n,表示棧中元素的個數

第二行輸入n個整數a_iai​表示棧頂到棧底的各個元素

輸出一行表示排序後的棧中棧頂到棧底的各個元素。

n = int(input())

arr = list(map(int, input().split()))

stack =

i = 1

while len(stack)temp:

min_num = temp

else:

j = 0

while n-i>j:

j += 1

i += 1

while stack:

print(stack.pop(),end=" ")

print

每遍歷一遍,就找到乙個最小元素,然後將其他元素入棧stack,記住已經找到的最小元素的個數i,保留i個元素將剩餘的的元素入棧arr,重複過程指導arr為空。這種思路針對最優的情況下時間複雜度和最壞情況是相同的,《程式設計師**面試指南》中的思路更好一些,如下所述。

n = int(input())

stack = list(map(int, input().split()))

def reverse(stack):

hel =

while (stack):

cur = stack.pop()

while (hel and cur>hel[-1]):

while hel:

return stack

reverse(stack)

類似於冒泡的思想,當hel棧頂的元素小於stack棧頂的元素時,則入棧;否則將hel棧中大的元素全部重新入棧stack,重複這個過程。

棧 用乙個棧實現另乙個棧的排序

題面 用乙個棧實現另外乙個棧的頂到底降序排序 要求 不能使用額外的資料結構,但可以使用新的變數。思路 給定棧s,輔助棧help 1.遍歷給定棧 出棧 棧頂出棧cur,與help棧頂比較,如果大於輔助棧頂元素值,那麼輔助棧棧頂元素出棧至s棧,直到help棧頂元素值 cur 2.help壓入cur 2....

用乙個棧實現另乙個棧的排序

背景 乙個棧的排序其實是很好做的,但是現在要你將該棧從頂到底從大到小排序,只允許申請乙個輔助棧,可以申請有限個變數,除此之外不能再申請額外的資料結構,你該怎麼搞?演算法 設要排序的棧為st,輔助棧為help,從st彈出的元素記為cur,help的棧頂元素記為top。一直執行上述操作,直到st為空結束...

用乙個棧實現另乙個棧的排序

題目 乙個棧中元素型別為整型,想將該棧從頂到底按從大到小排序,只允許申請乙個棧。除此之外,可以申請新變數,但不能申請額外的資料結構。舉例 public static void main string args 用乙個棧實現另乙個棧的排序 public static void sortstack st...