iT邦幫忙

0

我想寫出 quicksort 和bubble sort的題目,但我寫不出來

  • 分享至 

  • xImage

老師出了3個例題
我不懂要怎麼在90右邊多出60
我已經照同學告訴我的自己練習寫了
還是不確定哪一 行有問題
(input values) (expected output)

  1.   10,20,80,5,90,60,15        5,10,15,20,60,80,90,60
    
  2.   10,30,100,-15,0,90,20      -15,0,10,20,30,90,100
    
  3.   -1,abc,345,90,2,50         error(undefind)
    

data = [10,30,100,-15,,90,20]

def quicksort(data, left, right):
if left >= right :
return

min = left                      
pig = right                     
clock = data[left]                 

while min != pig:                  
    while data[pig] > clock and min < pig:   
        pig -= 1
    while data[min] <= clock and min < pig:  
        min += 1
    if min < pig:                        
        data[min], data[pig] = data[pig], data[min] 


data[left] = data[min] 
data[min] = clock

  quicksort(data, left, min-1)   
  quicksort(data, min+1, right)  

quicksort(data, 0, len(data)-1)
print(data)

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2020-12-21 12:52:06 檢舉
我不懂我們連你怎麼寫的都看不到,怎麼可以告訴你你哪裡寫錯?
我寫的程式我也只是略懂,可否幫忙描述一下每一行的說明 問了同學的解釋還是不太能理解
有些是我自己改掉當作是一點樂趣的
程式當樂趣是不錯的想法。
可是...在完全搞不懂題意的情況下。
這會比通靈還更困難解題。

通靈還可以問一下神鬼。
但在不知道要問誰之前。怎麼通都沒用的。
archer9080 iT邦研究生 3 級 ‧ 2020-12-21 15:01:57 檢舉
第一題應該是用快速排序法
第二題是用泡沫排序
所以60應該是基準點
也只能這樣瞎猜,就算擲筊也擲不出個所以然

網路上基礎的寫法 及 講解都大同小異
除非是不負責任的那種
要不然通常面對面是最容易溝通的方式
快速排序法,參考
https://ithelp.ithome.com.tw/articles/10202330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-12-21 17:42:02

參考資料來源
你同學寫的跟鐵人賽的內容蠻接近的

data = [89, 34, 23, 78, 67, 100, 66, 29, 79, 55, 78, 88, 92, 96, 96, 23]

def quicksort(data, left, right): # 輸入資料,和從兩邊開始的位置
    if left >= right :            # 如果左邊大於右邊,就跳出function
        return

    i = left                      # 左邊的代理人
    j = right                     # 右邊的代理人
    key = data[left]                 # 基準點

    while i != j:                  
        while data[j] > key and i < j:   # 從右邊開始找,找比基準點小的值
            j -= 1
        while data[i] <= key and i < j:  # 從左邊開始找,找比基準點大的值
            i += 1
        if i < j:                        # 當左右代理人沒有相遇時,互換值
            data[i], data[j] = data[j], data[i] 

    # 將基準點歸換至代理人相遇點
    data[left] = data[i] 
    data[i] = key

    quicksort(data, left, i-1)   # 繼續處理較小部分的子循環
    quicksort(data, i+1, right)  # 繼續處理較大部分的子循環

quicksort(data, 0, len(data)-1)
print(data)
咖咖拉 iT邦好手 1 級 ‧ 2020-12-21 17:51:11 檢舉

/images/emoticon/emoticon56.gif

看起來沒問題耶...

我要發表回答

立即登入回答