Download presentation
Presentation is loading. Please wait.
1
Arrays CSC 171 FALL 2001 LECTURE 10
2
History: Alan Turing Founder of Computer Science 1937 - Alan Turing developed the idea of a "Universal Machine" capable of executing any describable algorithm, and forming the basis for the concept of "computability". Turing's ideas differed from those of others who were solving arithmetic problems by introducing the concept of "symbol processing".
3
The Turing Machine Tape memory (movable) acabcbbaa Read head h q3q3 q2q2 q1q1 q0q0 State machine
4
The Turing Machine A Turing machine is a quintuple (K, , ,s,H) – K is a finite set of states – is an alphabet of symbols – s is the initial state – H is the halting state – is the transition function From (K-H) x To K x ( U {move_tape_left, move_tape_right})
5
The Turing Test Turing put forward the idea of an 'imitation game', in which a human being and a computer would be interrogated under conditions where the interrogator would not know which was which, the communication being entirely by textual messages. Turing argued that if the interrogator could not distinguish them by questioning, then it would be unreasonable not to call the computer intelligent. Turing's 'imitation game' is now usually called 'the Turing test' for intelligence.
6
Arrays Suppose we want to write a program that reads a set of test grades and prints them, marking the highest grade? 65.2 81.7 31.3 95.4 < - highest grade 76.1 58.6
7
Individual data items If we knew that there were always 150 students in the class, we could store the data as individual variables – score1,score2,score3,.., score150 What would the data entry code look like? What would the printing code look like? How about finding the max?
9
Arrays An array is a collection of data items of the same type Every element of the collection can be accessed separately.
10
Constructing Arrays double [] data = new double[10];
11
Setting Array values To get values into an array you need to specify which slot you want to use. Specification is done with the [ ] operator The [ ] operator follows the name of the array The [ ] operator encloses and integer-valued expression called the index or subscript
12
Setting array values data[4] = 29.95;
13
Using array values Similar to setting int i = 4 ; System.out.println(“data[“+i+”] ==“+ data[i]); > data[4] ==29.95
14
Array data items Suppose we want to write a program that reads a set of test grades and prints them, marking the highest grade? What would the data entry code look like? What would the printing code look like? How about finding the max?
15
Array issues Does it work? double [] data = new double[10]; data[10] = 5.4;
16
Array issues Does it work? double [] data = new double[10]; data[10] = 5.4; When the program runs, an out-of-bounds subscript generates an exception and terminates the program – why?
17
Array issues Can we search for the top grade as follows double maxScore = data[0]; for (int i = 1;I<=data.length;i++) If (data[i] > maxScore) maxScore = data[i];
18
Array issues An array of length n has index values from 0 to (n-1) double maxScore = data[0]; for (int i = 1;I<data.length;i++) If (data[i] > maxScore) maxScore = data[i];
19
Array issues Does it work? public static void main(String[] args){ double[] data; If (data[0] > 4.0) System.out.println(“GT 4!”); }
20
Array issues Arrays must be allocated! public static void main(String[] args){ double[] data = new double[10]; If (data[0] > 4.0) System.out.println(“GT 4!”); }
21
Array issues Arrays can be initialized! public static void main(String[] args){ double[] data = {2,3,4,5,6}; If (data[0] > 4.0) System.out.println(“GT 4!”); } // note: new int[] {2,3,4,5,6} ; is also legal
22
Copying Arrays Is this ok? double [] data = new double[10]; double[] testScores; testScores = data;
23
Copying Arrays Is this ok? double [] data = new double[10]; double[] testScores; testScores = data; How many arrays are there?
24
Copying Array REFERENCES double [] data = new double[10]; double[] testScores; testScores = data;
25
Copying Arrays So, what if we want to make two “real” copies – what does the code look like? Write a method so that int[] x = {3,4,5,6,7,8,9,10}; int[] y = myCopy(x);
26
Copying public static int[] myCopy(int[] x){ int[] r_arry = new int[x.length]; for (int i = 0 ; i< x.length;i++) r_arry[i] = x[i]; return r_arry; }
27
System.arrayCopy //System.arraycopy(from,fromstart,to,toStart,count); System.arraycopy(data,0,prices,0,data.length);
29
History: Colossus Bletchley Park 1940 A major need for supporting the war effort was to decrypt the intercepted messages of the German forces. Encrypted in the early years using the US designed ENIGMA, a team at Bletchley Park, built a series of machines culminating in 1943 with Colossus.
30
More Arrays Suppose we want to write a program that reads a set of test product names, prices, and quality scores prints them, marking the best value? (score/prices) Digital 500X, $3499.00, score 73 ZEOS Pentium-III/500, $2545.00, score 70 Micro Express MF, $2195.00, score 72 < - best value Polywell Poly 450IP, $2099.00, score 30
31
Parallel Arrays One solution, can you think of a better one?
32
Arrays of Objects Easier to deal with - arrays hold references
33
Multidimensional Arrays Arrays of arrays – Arrays are objects – Arrays hold references to objects – Ergo, arrays can hold arrays
34
Tables are 2D arrays int size = 5; int[][] mtable = new int[size][size]; for(i=0;i<size;i++) for(int j=0;j<size;j++) mtable[i][j] = (i+1)*(j+1); 12345 246810 3691215 48121620 510152025 // how easy to modify code ???? int[][] mtable = new int[5][5]; for(i=0;i<5;i++) for(int j=0;j<5;j++) mtable[i][j] = (i+1)*(j+1);
35
Arrays of Arrays int [][] powers = new int[10][10];
36
Allocating arrays of arrays int size = 10; int[][] mtable = new int[size][]; for(i=0;i<mtable.length;i++) { mtable[i]= new int[size]; for(int j=0;j<mtable[i].length;j++) mtable[i][j] = (i+1)*(j+1); }
37
Alternately The following is legal. What is the structure? int[][] b = new int[5][]; for (int i=0;i<b.length;i++) b[i] = new int[i+1];
38
Alternately int[][] b = new int[5][]; for (int i=0;i<b.length;i++) b[i] = new int[i+1]; This is known as a triangular array Is b[3][1] a legal reference or b[1][3]?
39
Passing Arrays In JAVA – Primitives are passed by value A copy of the variable is made & used Modifications made do not affect calling value public void myAdd(int x) { x++;} – Objects are passed by reference Since the reference is passed it is possible to change the value in the calling method Public void myAdd (int[] x) {x[0]++;}
40
Pass by value public class passArry { public static void main(String args[]){ int x1 = 3; System.out.println("x1 == "+x1); myAdd(x1); System.out.println("x1 == "+x1); } public static void myAdd(int x) {x++;} }
41
Pass by reference public class passArry { public static void main(String args[]){ int[] x2 = {4,5,6}; System.out.println("x2[0] == "+x2[0]); myAdd(x2); System.out.println("x2[0] == "+x2[0]); } public static void myAdd(int[] x) {x[0]++;} }
42
Exercise Write a method that takes an integer array and prints the values
43
Exercise public static int myPrint(int[] x){ for (int i = 0 ; i<x.length;i++) System.out.println(x + “[“+i+”] == “+ x[i]); }
44
Exercise Write a method that takes an integer array, and two integer indices and swaps the value
45
Exercise public static void mySwap(int[] x, int i, int j){ int temp = x[i]; x[i] = x[j]; x[j] = temp; }
46
Exercise Write a method that takes an integer array and returns the index of the maximum value
47
Exercise public static int myMax(int[] x){ int rvalue = 0; for (int i = 0 ; i<x.length;i++) if (x[i] > x[rvalue]) rvalue = i; return rvalue; }
48
Exercise Overload the max finder to take an array and an index – the method now returns the index of the maximum value >= the index passed in
49
Exercise public static int myMax(int[] x, int j){ int rvalue = j; for (int i = j ; i<x.length;i++) if (x[i] > x[rvalue]) rvalue = i; return rvalue; }
50
Sorting Write a method that takes an integer array Loop through all the positions in the array, one after the other At each (current) position, find the max from that position to the rest of the array. Swap the value with the current position This is termed selection sort
51
Selection Sort Does it work? public void selSort(int x){ for (int i = 0 ; i<x.length;i++){ int temp = myMax(x,i); mySwap(x,i,temp); } Can you prove it works? What is the loop invariant?
52
Sorting Write a method that takes an integer array Loop through all the positions in the array, one after the other At each (current) position, compare the value to the next in line. If the next is > the current swap the value with the current position How many times do I have to do this? This is termed bubble sort
53
Bubble Sort Does it work? public void bubSort(int x){ for (int i = 0 ; i<x.length;i++){ for (int j = 0 ; j<(x.length-1);j++){ If (x[ j ] < x[ j+1 ]) mySwap(x,j,j+1); }
54
Question to ponder Which is “better” – bubble sort – selection sort What do you mean by “better”? – Running time on same sized array – Number of swaps – Memory usage – Simplicity & reliability
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.