python - Add elements into a sorted array in ascending order -
i have following program implements sorted bag. adds elements in sorted order (ascending order) when giving list. when created new sorted bag argument of bag, it's not in sorted order (instead in descending order). see below
thanks help
# array class #---------------------------------------------------- class array(object): # represents array. default_capacity = 5 def __init__ (self, capacity, fillvalue = none): '''capacity = static size of array. fillvalue placed @ each element''' self._items = list() self._capacity = capacity self._logicalsize = 0 self._fillvalue = fillvalue count in range(capacity): self._items.append(fillvalue) def __getitem__(self, index): return self._items[index] def __setitem__(self, index, newitem): self._items[index] = newitem # arraysortedbag class #---------------------------------------------------- class arraysortedbag(object): '''an array-based bag implementation''' def __init__(self, sourcecollection = none): '''sets initial state of self, includes contents of sourcecollection, if it's present''' self._items = array(10) self._size = 0 if sourcecollection: item in sourcecollection: self.add(item) def __len__(self): return self._size def __iter__(self): cursor = 0 while cursor < len(self): yield self._items[cursor] cursor += 1 def add(self, item): '''adds item self.''' insertindex = 0 # first found index item inserted @ in range(self._size): if self._items[i] > item: insertindex = break # then, shift items down 1 position until insertindex, in range (self._size, insertindex, -1): self._items[i] = self._items[i-1] # last, assign value _items[insertindex] self._items[insertindex] = item self._size += 1 # test driver #---------------------------------------------------- if __name__ == "__main__": b1 = arraysortedbag([2000, 2, 1000]) print ("display bag b1") in b1: # <------ correct order, ascending order print (i) b2 = arraysortedbag(b1) print ("\ndisplay bag b2") in b2: # <----- wrong order, descending order print (i)
in second instantiation of class arraysortedbag, passing sorted list. arraysortedbag.init() method adds items using add() method. when add() called item added never less existing list. therefore insertindex remains equal zero. therefore new item added beginning of list.
# first found index item inserted @ in range(self._size): if self._items[i] > item: # item never less self._items[i] insertindex = break
Comments
Post a Comment