binary.ts 968 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. export namespace Binary {
  2. export function search<T>(array: T[], id: string, compare: (item: T) => string): { found: boolean; index: number } {
  3. let left = 0
  4. let right = array.length - 1
  5. while (left <= right) {
  6. const mid = Math.floor((left + right) / 2)
  7. const midId = compare(array[mid])
  8. if (midId === id) {
  9. return { found: true, index: mid }
  10. } else if (midId < id) {
  11. left = mid + 1
  12. } else {
  13. right = mid - 1
  14. }
  15. }
  16. return { found: false, index: left }
  17. }
  18. export function insert<T>(array: T[], item: T, compare: (item: T) => string): T[] {
  19. const id = compare(item)
  20. let left = 0
  21. let right = array.length
  22. while (left < right) {
  23. const mid = Math.floor((left + right) / 2)
  24. const midId = compare(array[mid])
  25. if (midId < id) {
  26. left = mid + 1
  27. } else {
  28. right = mid
  29. }
  30. }
  31. array.splice(left, 0, item)
  32. return array
  33. }
  34. }