Ordered Array

Ordered Array

Describes BinarySearch in sorted Arrays.

We’ll use the OrderedArray class to encapsulate the array and its algorithms. The heart of this class is the find() method, which uses a BinarySearch to locate a specified data item. In general, the OrderedArray program is similar to Hight Array

$ dart 01_array/ordered_array.dart
import 'dart:io';

class OrderedArray {
  List<int> a; // ref to array a
  int nElems; // // number of data items

  // Constructor
  OrderedArray(int max) {
    a = new List<int>(max); // create array (List in Dart)
    nElems = 0; // initialize items count
  }

  int size() {
    return nElems;
  }

  /// Binary search
  int find(int searchKey) {
    int lowerBound = 0;
    int upperBound = nElems - 1;
    int curIn;

    while(true) {
      curIn = (lowerBound + upperBound) ~/ 2;
      if(a[curIn] == searchKey) {
        return curIn; // found It
      } else if (lowerBound > upperBound) {
        return nElems; // can't find it
      } else { // divide range
        if(a[curIn] < searchKey) {
          lowerBound = curIn + 1; // it's in upper half;
        } else {
          upperBound = curIn - 1; // it's in lower half;
        }
      }
    }
  }

  /// Insert element into ordered array
  void insert(int value) {
    int j;
    for(j = 0; j < nElems; j++) { // find where it goes
      if (a[j] > value) { // liner search
        break;
      }
    }
    for(int k = nElems; k > j; k--) { // move bigger ones up
      a[k] = a[k - 1];
    }
    a[j] = value; // insert it
    nElems++; // increment size
  }

  /// Delete element from array
  bool delete(int value) {
    int j = find(value);
    if (j == nElems) { // can't find it
      return false;
    } else { // found it
      for(int k = j; k > j; k++) { // move bigger ones down
        a[k] = a[k + 1];
      }
      nElems--; // decrement size
      return true;
    }
  }

  /// Display array contents
  void display() {
    for(int j = 0; j < nElems; j ++) { // for each element
      stdout.write('${a[j]} '); // display it
    }
    stdout.writeln('');
  }
}

void main() {
  int maxSize = 100; // array size
  OrderedArray array = new OrderedArray(maxSize); // // create instance of OrderedArray

  // Insert 10 items
  array.insert(77);
  array.insert(99);
  array.insert(44);
  array.insert(55);
  array.insert(22);
  array.insert(88);
  array.insert(11);
  array.insert(00);
  array.insert(66);
  array.insert(33);

  // Search item
  int searchKey = 55;

  if(array.find(searchKey) != array.size()) {
    stdout.writeln('Found $searchKey');
  } else {
    stdout.writeln("Can't find $searchKey");
  }

  // Display items
  array.display();

  // Delete 3 items
  array.delete(00);
  array.delete(55);
  array.delete(99);

  // Display items again
  array.display();
}