Pythonでマージソートのプログラムを作成しているのですが、まったくソートがされずに結果が出力されてしまいます。実行結果から変数のスコープの問題のような気がするのですが、よくわからないです。
※クラス化せずに書いたときは問題なくソートされていました。
##ソースコード
Python
1 2class mergeSortClass: 3 4 def __init__(self,mylist): 5 self.list = mylist 6 self.left = 0 7 self.right = 0 8 self.mid = 0 9 10 def merge(self): 11 12 INF = 1000000007 13 n1 = self.mid - self.left 14 n2 = self.right - self.mid 15 L = [0] * (n1+1) 16 R = [0] * (n2+1) 17 18 print('n1:{}, n2:{}'.format(n1,n2)) 19 20 for i in range(0,n1): 21 22 L[i] = self.list[self.left + i] 23 24 for i in range(0,n2): 25 print("i:{},mid:{}".format(i,self.mid)) 26 R[i] = self.list[self.mid + i] 27 28 L[n1] = INF 29 R[n2] = INF 30 31 i = 0 32 j = 0 33 34 for k in range(self.left,self.right): 35 36 if L[i] <= R[j] : 37 self.list[k] = L[i] 38 i = i + 1 39 else: 40 self.list[k] = R[j] 41 j = j + 1 42 43 44 def mergeSort(self ,left ,right): 45 self.left = left 46 self.right = right 47 self.mid = (self.left + self.right) // 2 48 print("left: {}, right: {}, mid: {}".format(self.left,self.right,self.mid)) 49 if self.left + 1 < self.right: 50 self.mergeSort(self.left, self.mid) 51 self.mergeSort(self.mid , self.right) 52 self.merge() 53 54if __name__ == '__main__': 55 56 A = [7675,8,678,9,87,84,645,3,46456,24,423,4,3] 57 58 obj = mergeSortClass(A) 59 obj.mergeSort(0, len(A)) 60 61 print(A) 62
実行結果
left: 0, right: 13, mid: 6 left: 0, right: 6, mid: 3 left: 0, right: 3, mid: 1 left: 0, right: 1, mid: 0 left: 0, right: 1, mid: 0 n1:0, n2:1 i:0,mid:0 left: 0, right: 1, mid: 0 n1:0, n2:1 i:0,mid:0 left: 0, right: 1, mid: 0 n1:0, n2:1 i:0,mid:0 [7675, 8, 678, 9, 87, 84, 645, 3, 46456, 24, 423, 4, 3]
回答1件
あなたの回答
tips
プレビュー