Advertisement
whiteshark05

Freq sort

Nov 22nd, 2022 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. a = [1, 2 ,3 ,3 ,3, 4, 4]
  2. n = len(a)
  3. def bs(a, l, r, target):
  4.     ans = -1
  5.     while l <= r:
  6.         m = (l + r) // 2
  7.         if a[m] == target:
  8.             ans = m
  9.             l = m + 1
  10.         elif a[m] < target:
  11.             l = m + 1
  12.         else:
  13.             r = m - 1
  14.     return ans
  15.    
  16. def quicksort(xs):
  17.     if xs:
  18.         pivot = xs[0]
  19.         below = [i for i in xs[1:] if i > pivot]
  20.         above = [i for i in xs[1:] if i <= pivot]
  21.         return quicksort(below) + [pivot] + quicksort(above)
  22.     else:
  23.         return xs
  24.        
  25. def fsort(a):
  26.     l, r = 0, 0
  27.     while l < len(a): # O(N)
  28.         r = bs(a, l, n-1, a[l])  # O(logN) -> O(NlogN)
  29.         f = r - l + 1
  30.         for _ in range(l, r+1):
  31.             a[l] += 10000*f
  32.             l += 1
  33.         l = r + 1
  34.    
  35.     a = quicksort(a) # O(NlogN)
  36.    
  37.     for i in range(len(a)): #O(N)
  38.         a[i] %= 10000
  39.    
  40.     return a
  41.    
  42. print(fsort(a)) #[3, 3, 3, 4, 4, 2, 1]
  43.  
  44.  
  45.  
  46.  
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement