Title: Searching and Sorting Using Standard Classes
 1Searching and Sorting Using Standard Classes
-  Searching data other than primitive type. 
-  Comparable interface. 
-  Implementing compareTo() method. 
-  java.util package  java.util.Arrays class. 
-  Programming examples 
-  Preview Basic Data Structures (Part I).
2Searching and Sorting Real Data
- So far, all the algorithms we have studied have 
 been on array of integers.
- However, in real life, there is rarely a need to 
 search or sort a collection of integers. What
 are often encountered are records of say
 students, bank accounts, books, etc., which have
 many fields.
- In java, these records are implemented as 
 objects. Thus, the question is, can we improve
 these algorithms to handle array of objects?
- Fortunately Java has made it very easy to do 
 this. All that is required is for a class to
 implement the Comparable interface which has one
 method named, compareTo(). Consider the
 following example
3Comparable Interface  compareTo() Method
- java.lang package defines a Comparable interface 
 as follows
- public interface Comparable  int compareTo 
 (Object other)
- Any class that implements the Comparable 
 interface must supply the compareTo method
- The compareTo method is intended to sort objects. 
 A sorting algorithm will repeatedly call the
 compareTo method e.g.
-  first.compareTo(second) 
-  depending on the return value (e.g. 1, 0, 1) 
 from compareTo method, the sorting algorithm
 decides whether the objects are in correct order
 or not (sorting) OR the particular object is
 found or not (searching).
4Example Implementing of compareTo() method
- Suppose we have a class Student and we want to 
 search record of a particular student. The
 implementation of compareTo() method is as
 follows
- In compareTo() method object other of type Object 
 is downcast to object s of type Student so that
 id of student to be search can be compare with id
 of other student. If search is successful the two
 ids matches and method returns 0.
public int compareTo(Object other)  
Student s  (Student) other if 
(iDNumber lt s.iDNumber) return -1 
 else if (iDNumber gt s.iDNumber) 
return 1 else return 0 
class Student implements Comparable  
private int iDNumber private String name 
 private double gPA .. 
 5Example Implementing compareTo() (Contd)
public class Student implements Comparable  private int iDNumber private String name private double gPA public Student(int iDNumber, String name, double gPA)  this.iDNumber  iDNumber this.name  name this.gPA  gPA  public Student(int iDNumber)  this(iDNumber,"",0.0)  public String toString()  return iDNumber"\t"name"\t"gPA  public int compareTo(Object other)  Student s  (Student) other if (iDNumber lt s.iDNumber) return -1 else if (iDNumber gt s.iDNumber) return 1 else return 0  //other methods here  
 6Example Implementing compareTo() (Contd)
import java.io.public class ComparableSearch  public static intbinarySearch(Comparable a, int from, int to, Comparable v)  if (from gt to) return -1 int mid  (from  to) / 2 int diff  amid.compareTo(v) if (diff  0) // amid  v return mid else if (diff lt 0) // amid lt v  return binarySearch(a, mid  1, to, v) else return binarySearch(a, from, mid - 1, v)   public static int search(Comparable a, Comparable v)  return binarySearch(a, 0, a.length - 1, v)  public static void main(String args) throws IOException  BufferedReader console  new BufferedReader(new InputStreamReader(System.in)) Student  s  new Student4 s0  new Student(955000, "Ibrahim", 3.5) s1  new Student(966000, "Amir", 2.0) s2  new Student(977000, "Talal", 2.4) s3  new Student(988000, "Usman", 2.5) for (int i  0 i lt s.length i) System.out.println(si) System.out.print("\nEnter ID Number to search for") Comparable v  new Student(Integer.parseInt(console.readLine())) int j  search(s, v) if (j ! -1) System.out.println("Found in position "  (j1)) else System.out.println(v  " not found")  
 7Standard Sorting  Searching Methods
- The Arrays class of the java.util package 
 implements binarySearch and a sorting method for
 both numbers and comparable objects.
- If you wish, you can call these methods rather 
 than your own implementations.
- The following example shows how these methods may 
 be used.
import java.io.import java.util.Arrayspublic class StandardSearch  public static void main(String args) throws IOException  BufferedReader console  new BufferedReader(new InputStreamReader(System.in))  int a  ArrayUtil.randomIntArray(20, 100) ArrayUtil.print(a) Arrays.sort(a) ArrayUtil.print(a) System.out.print("\nEnter n number to search for") int j  Arrays.binarySearch(a, Integer.parseInt(console.readLine())) if (j ! -1) System.out.println("Found in position "  (j1)) else System.out.println("element not found") 
 8Standard Sorting  Searching Methods (Contd)
 Student s  new Student4 s0  new Student(977000, "Talal", 2.4) s1  new Student(988000, "Usman", 2.5) s2  new Student(999000, "Umar", 3.0) s3  new Student(955000, "Ibrahim", 3.5) Arrays.sort(s) for (int i  0 i lt s.length i) System.out.println(si) System.out.print("\nEnter ID Number to search for") Comparable v  new Student(Integer.parseInt(console.readLine())) j  Arrays.binarySearch(s, v) if (j ! -1) System.out.println("Found in position "  (j1)) else System.out.println(v  " not found")  
 9Modified ArrayUtil Class 
import java.util.Randompublic class ArrayUtil  public static int randomIntArray(int length, int n)  int a  new intlength Random generator  new Random() for (int i  0 i lt a.length i) ai  generator.nextInt(n) return a  public static void swap(int a, int i, int j)  int temp  ai ai  aj aj  temp  public static void swap(Comparable a, int i, int j)  Comparable temp  ai ai  aj aj  temp  public static void print(int a)  for (int i  0 i lt a.length i) System.out.print(ai  " ") System.out.println()  public static Comparable copyArray(Comparable a, int size)  String b  new Stringsize if (size lt a.length) for (int i0 iltsize i) bi  (String) ai return b