Chapter 8 - One-dimensional arrays. In this chapter we will: introduce the array as a structure for storing large amounts of data, discuss common array operations, introduce algorithms for searching and sorting arrays, show how multiple images can be painted from an array to use in programming simple animations.
Trang 1by S.N Kamin, D Mickunas, E Reingold
Trang 2
Chapter Preview
In this chapter we will:
• introduce the array as a structure for storing large amounts of data
• discuss common array operations
• introduce algorithms for searching and sorting arrays
• show how multiple images can be painted
from an array to use in programming simple animations
Trang 4counts = new int[10];
scores = new double[15];
studentNames = new String[10];
Trang 5• Each box is an int variable
• The numbers on top are each variable’s subscript or index
• An array of size 10 has subscripts 0 to 9
Trang 6
Array Subscripts
• Arrays can contain any one type of value
(either primitive values or references)
• Subscripts are used to access specific array values
• Examples:
counts[0] // first variable in counts
counts[1] // second variable in counts
counts[9] // last variable in counts
counts[10] // error – trying to access
// variable outside counts
Trang 7
Expressions as Subscripts
• Array subscripts do not have to be constants
• Array subscripts do need to be integer
expressions that evaluate to valid subscript values for the current array allocation
• Examples:
counts[i]
counts[2*i]
counts[I/2]
Trang 8• You do not need to allocate the array
explicitly after it is initialized
• Example:
int [] primes =
{2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
Trang 9
Initializing an Array of Strings
final Sring[ ] NAME = {
“Sunday”, “Monday”, “Tuesday”,
“Wednesday”, “Thursday”, “Friday”, “Saturday”};
// procedure that prints the day of week public void printName (int day,
OutputBox out) { out.print(NAME[day – 1]);
}
Trang 10Trang 11
Aliases
• It is possible to have two different variables refer to the same array
• When this happens these variables are called aliases
• Creating aliases is not a good programming practice
• Example of how it can happen:
int [ ] A, B;
…
B = new int [10];
A = B;
Trang 12Trang 13
• Prints the contents of counts using length
for (int i=0; i < counts.length; i++) { out.println(counts[i]);
}
Trang 14
Extra Capacity Array
• Arrays cannot grow after they have been
allocated
• You can allocate more space than you
believe your application will need
• If you guess too low, you will still run out of space
• You do not need to use all the elements in an array (but total computer memory is finite)
Trang 16Trang 17
Processing Parallel Arrays
• This loop counts the number of students
whose performance improved from the first test to the second
Trang 18Trang 19
Student[ ] students;
students = new Student[10];
Trang 20
Passing Arrays as Arguments
• When an array is passed as an argument to a
method, what is passed is a pointer to the array, not
a new array (arrays are passed by reference)
• This means that if the method makes changes to the array, these changes are still in effect when the
method returns to its caller
• This is not true for primitive values which are passed
by value and not by reference
• Method header example:
public void read(Student[ ] students) {
Trang 21
Selection Sort
• Find the smallest element among the elements
A[0] A[n-1] and call it A[min]
• Swap A[0] and A[min] so A[0] contains the smallest element and A[1] A[n-1] not sorted
• Now the smallest element among the elements
A[1] A[n-1] and call it A[min]
• Swap A[1] and A[min] so A[1] contains the second smallest element and A[2] A[n-1] not sorted
• Proceed similarly for A[3], A[4], and so on
Trang 22
SelectionSort Class – part 1
public class SelectionSort {
public void selectionSort (double[] A, int size) { for (int i=0; i < size; i++) {
// elements in A[0] A[i–1] are less than
// elements in A[i] A[size-1] and
// A[0] A[i-1] are sorted
int min = findMinimum(A, i, size);
swap(A, I, min);
}
}
Trang 23
SelectionSort Class – part 2
int findMinimum (double[] A, int i, int size) {
int j, min = 1;
for (j= i + 1; j < size; j++)
// A[min] <= all elements in A[0] A[j–1]
if (A[j] < A[min]) min =j;
return min;
}
void swap (double[] A, int I, int j) {
double temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
Trang 24
Insertion Sort
• Iterate over subscripts 1 to n-1
– At the ith step, shift the elements A[0] A[i]
so that this part of the array is sorted
• Note: when the ith iteration begins
elements A[0] A[i – 1] are already
sorted, so the only shifting is that
required to insert A[i] into A[0] A[i-1]
Trang 26
Linear Search
int linearSearch (int[] A, int key) int i;
for (i = 0; i < A.length; i++) {
// key not in A[0] A[i - 1]
Trang 27• Epsilon should be as small a value as is
acceptable for your application
Trang 28
Using Arrays in Animation
Image[] mouse = new Image[NUMBER];
Int[] sleepTime = {1540, 240, 240, 240, 240, 240, 240, 240,
240, 240, 240, 240, 240, 240, 240}; public void show( ) {
for (int i = 0; i < NUMBER; i++)
Trang 29