Advertisement
Guest User

Untitled

a guest
Dec 18th, 2013
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.61 KB | None | 0 0
  1. import time
  2.  
  3. def pushDown(h, pos, n):
  4.     while 2 * pos + 1 < n:
  5.         j = 2 * pos + 1
  6.         if j + 1 < n and h[j+1] > h[j]:
  7.             j += 1
  8.         if h[pos] >= h[j]:
  9.             break
  10.         h[pos], h[j] = h[j], h[pos]
  11.         pos = j
  12.  
  13. if __name__ == "__main__":
  14.     start = time.time()
  15.     N = 10000000
  16.     h = list(range(N))
  17.     for i in range(N//2, -1, -1):
  18.         pushDown(h, i, N)
  19.     n = N
  20.     while n > 1:
  21.         n -= 1
  22.         h[0], h[n] = h[n], h[0]
  23.         pushDown(h, 0, n)
  24.     for i in range(N):
  25.         assert(h[i] == i)
  26.     print("Done in ", time.time() - start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement