CS 100: Lecture L17

March 30

| Back to Lecture Index |


// Illustrates  nested loop concept.


import java.io.*;
import java.awt.*;

public class CUCSDrawing extends Frame
{   
	public void paint(Graphics g)
	{
	   g.setColor(Color.black);
	   g.fillRect(0,0,1000,800);
	   
	   // Draw a collection of blue dots.
	   int[] hBlue = {100, 100, 80,   80,  70,  70,  80,  80, 100, 100};
	   int[] vBlue = { 80, 130, 180, 230, 280, 330, 380, 430, 480, 530};
	   
	   g.setColor(Color.blue);
	   int nBlue = hBlue.length;
	   for(int k=0;k<nBlue;k++)
	      g.fillOval(hBlue[k]-10,vBlue[k]-10,20,20);

       // Draw a collection of red dots.
	   int[] hRed = { 600, 620, 630, 640, 630, 620, 600};
	   int[] vRed = { 100, 170, 240, 310, 380, 450, 520};
	   
	   g.setColor(Color.red);
	   int nRed = hRed.length;
	   for(int k=0;k<nRed;k++)
	      g.fillOval(hRed[k]-10,vRed[k]-10,20,20);
	   
	   // Now draw a line that connects each blue dot with every red dot.
	   g.setColor(Color.yellow);
	   for(int i=0;i<nBlue;i++)
	   {
	      // Connect the ith blue dot with every red dot
	      for(int j=0;j< nRed;j++)
	      {
	         // Draw a line to the jth red dot.
	         g.drawLine(hBlue[i],vBlue[i],hRed[j],vRed[j]);
	      }
	   }
	
	}
	
}

public class L17A
{
	public static void main(String args[])
	{
		CUCSDrawing d = new CUCSDrawing();
		d.resize(1000,800);                    
		d.move(0,75);
		d.setTitle("Connecting dots");                 
		d.show();
		d.toFront();
	}
}


// Linear Search

import java.io.*;

public class L17B
{	
 

	public static void main(String args[])
	{
        TokenReader in = new TokenReader(System.in);
	    
	    int i;
	    int[] f = {28,18,30,87,22,13,37,84,70,91,15,34,62,98,30,55};
	    
	    SearchNSort.print(f);
	    
	    i = SearchNSort.LinSearch(f,15);  System.out.println("x = 15, i = " + i);
	    i = SearchNSort.LinSearch(f,19);  System.out.println("x = 19, i = " + i);
	    
	    SearchNSort.sort(f);
	    
	    SearchNSort.print(f);
	    
	    i = SearchNSort.BinSearch(f,5);   System.out.println("x = 5,  i = " + i);
	    i = SearchNSort.BinSearch(f,10);  System.out.println("x = 10, i = " + i);
	    i = SearchNSort.BinSearch(f,22);  System.out.println("x = 22, i = " + i);
	    i = SearchNSort.BinSearch(f,91);  System.out.println("x = 91, i = " + i);
	    i = SearchNSort.BinSearch(f,98);  System.out.println("x = 98, i = " + i);
	    i = SearchNSort.BinSearch(f,99);  System.out.println("x = 99, i = " + i);
	    
	    String[] s = { "p","i", "a", "k", "x" , "t", "w", "d"};
	    
	    SearchNSort.print(s);
	    
	    SearchNSort.sort(s);
	    
	    SearchNSort.print(s);
	    
	    int[]x = {160 ,150, 140, 130, 120, 110 ,100, 90, 80, 70, 60, 50 ,40 ,30, 20, 10};
	    
	    SearchNSort.print(x);
	    SearchNSort.MergeSort(x);
	    SearchNSort.print(x);
	    
	    in.waitUntilEnter();
	}

}


 public class SearchNSort
 {  
   
   // Yields the index of the first occurence of x in the array a.
   // Yields -1 if no array value equals x.
    public static int LinSearchBook(int[]a,int x)
    {
       int n = a.length;
       for (int k=0;k<n;k++)
       {
          if (a[k]==x)
          {
             return k;
          }     
       }
       return -1;
    }
    
   // Yields the index of the first occurence of x in the array a.
   // Yields -1 if no array value equals x.
    public static int LinSearch(int[]a,int x)
    {
       int n = a.length;
       int k=0;
       while (k<a.length && x!=a[k])
          k++;
       if (k==a.length)
          return -1;
       else
          return k;     
    }
    

    // Yields -1 if no array value equals x.
    public static int BinSearch(int[] a,int x)
    {
       int n = a.length;
       int L = 0;
       int R = n-1;
       int m;
     
       // 
       while (L<=R)
       {
          m = (L+R)/2;   // The midpoint index.
          if (x==a[m])
             return m;
          if (x>a[m])
             // x is not in a[0..m]
             L = m+1;
          else
             // x is not in a[m..n-1]
             R = m-1;
       }
       return -1;
    }
    
                 
    // Insertion sort for integers.   
    // Permutes the values in a so that a[0]<=a[1]<=...<=a[n-1]
    // where n = a.length
     public static void sort(int[] a)
     {
        int n = a.length;
        int temp; // For swapping array elements        
        int j;
        for (int k=1;k<n;k++)
        {
           // a[0..k-1] is sorted. Now sort a[0..k] by
           // "pushing" it left as long as 
           // it is smaller than its "left neighbor".
           j=k;
           while(j>=1 && a[j]<a[j-1])
           {
              temp = a[j-1]; a[j-1] = a[j]; a[j] = temp;
              j=j-1;
           }
        }
     }  
  
    // Insertion sort for strings.
    // Permutes the values in a so that a[0]<=a[1]<=...<=a[n-1]
    // where n = a.length
     public static void sort(String[] a)
     {
        int n = a.length;
        String temp; // For swapping array elements.
        int j;
        for (int k=1;k<n;k++)
        {
           // a[0..k-1] is sorted. Now sort a[0..k] by
           // "pushing" it left as long as 
           // it is smaller than its "left neighbor".
           j=k;
           while(j>=1 && a[j].compareTo(a[j-1])<0)
           {
              temp = a[j-1]; a[j-1] = a[j]; a[j] = temp;
              j=j-1;
           }
        }
     }  
     
     
    // Merge sort for integers.
    // Permutes the values in a so that a[0]<=a[1]<=...<=a[n-1]
    // where n = a.length
    public static void MergeSort(int[] a)
    {
       int n = a.length;
       if (n==1)
          // Nothing to do
          return;
       else
       { 
         
          // Split the array in half
          int m = n/2;
          int[] aLeft  = new int[m]; 
          int[] aRight = new int[m];
          for(int i=0;i<m;i++)
          {
             aLeft[i] =  a[i]; 
             aRight[i] = a[i+m];
          }
          
          
          // Sort the left and right halves
          MergeSort(aLeft); 
          MergeSort(aRight);
          
          // Merge the results
          int iLeft=0; 
          int iRight=0;
          for (int k=0;k<n;k++)
             if (iLeft==m)                             { a[k] = aRight[iRight]; iRight++;}
             else if (iRight==m)                       { a[k] = aLeft[iLeft];   iLeft++; }
             else if (aLeft[iLeft] <= aRight[iRight])  { a[k] = aLeft[iLeft];   iLeft++;}
             else                                      { a[k] = aRight[iRight]; iRight++;}
        }
          
     }
          
          
    // Print the values of a reasonably short integer array.      
    public static void print(int[] a)
    {
       int n = a.length;
       System.out.println("\n");
       for(int k=0;k<n;k++)
          System.out.print(" " + a[k]);
       System.out.println("\n ");
    }
    
    // Print the values of a reasonably short string array.   
    public static void print(String[] a)
    {
       int n = a.length;
       System.out.println("\n");
       for(int k=0;k<n;k++)
          System.out.print(" " + a[k]);
       System.out.println("\n ");
    }
    }