06 Slide
06 Slide
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Opening Problem
Read one hundred numbers, compute their average, and find out how many numbers are above the average.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Solution
AnalyzeNumbers
Run
Objectives
To describe why arrays are necessary in programming (6.1). To declare array reference variables and create arrays (6.2.1-6.2.2). To initialize the values in an array (6.2.3). To access array elements using indexed variables (6.2.4). To declare, create, and initialize an array using an array initializer (6.2.5). To program common array operations (displaying arrays, summing all elements, finding min and max elements, random shuffling, shifting elements) (6.2.6). To simplify programming using the for-each loops (6.2.7). To apply arrays in the LottoNumbers and DeckOfCards problems (6.3-6.4). To copy contents from one array to another (6.5). To develop and invoke methods with array arguments and return value (6.66.7). To define a method with variable-length argument list (6.8). To search elements using the linear (6.9.1) or binary (6.9.2) search algorithm. To sort an array using the selection sort (6.10.1) To sort an array using the insertion sort algorithm (6.10.2). To use the methods in the Arrays class (6.11).
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Introducing Arrays
Array is a data structure that represents a collection of the same types of data.
double[] myList = new double[10]; myList reference myList[0] myList[1] Array reference variable myList[2] myList[3] myList[4] Array element at index 5 myList[5] myList[6] myList[7] myList[8] myList[9] 5.6 4.5 3.3 13.2 4 34.33 34 45.45 99.993 11123
5
Element value
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
datatype[] arrayRefVar;
Example:
double[] myList;
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Creating Arrays
arrayRefVar = new datatype[arraySize]; Example:
myList = new double[10];
references the first element in the array. myList[9] references the last element in the array.
myList[0]
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
For example,
myList.length returns 10
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Default Values
When an array is created, its elements are assigned the default value of
0 for the numeric primitive data types, '\u0000' for char types, and false for boolean types.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
10
Indexed Variables
The array elements are accessed through the index. The array indices are 0-based, i.e., it starts from 0 to arrayRefVar.length-1. In the example in Figure 6.1, myList holds ten double values and the indices are from 0 to 9. Each element in the array is represented using the following syntax, known as an indexed variable:
arrayRefVar[index];
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
11
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
12
Array Initializers
Declaring,
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
13
myList[2] = 3.4;
myList[3] = 3.5;
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
14
CAUTION
Using the shorthand notation, you have to declare, create, and initialize the array all in one statement. Splitting it would cause a syntax error. For example, the following is wrong:
double[] myList;
myList = {1.9, 2.9, 3.4, 3.5};
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
15
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 0 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
16
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 0 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
17
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 0 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
18
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
19
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
20
animation
0 1 2 3 4
0 1 0 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
21
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
22
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
23
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 0 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
24
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 6 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
25
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 6 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
26
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 6 0
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
27
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
0 1 3 6 10
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
28
animation
0 1 2 3 4
0 1 3 6 10
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
29
animation
0 1 2 3 4
0 1 3 6 10
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
30
animation
public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; } }
0 1 2 3 4
11 1 3 6 10
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
31
Processing Arrays
See the examples in the text.
1.
2.
3. 4. 5. 6. 7. 8.
32
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
33
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
34
Printing arrays
for (int i = 0; i < myList.length; i++) { System.out.print(myList[i] + " "); }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
35
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
36
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
37
Random shuffling
for (int i = 0; i < myList.length; i++) { // Generate an index j randomly int index = (int)(Math.random() * myList.length); // Swap myList[i] with myList[j] double temp = myList[i]; myList[i] = myList[index]; myList[index] = temp; } myList i [0] [1] . . . [index] A random index swap
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
38
Shifting Elements
double temp = myList[0]; // Retain the first element // Shift elements left for (int i = 1; i < myList.length; i++) { myList[i - 1] = myList[i]; } myList
// Move the first element to fill in the last position myList[myList.length - 1] = temp;
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
39
You still have to use an index variable if you wish to traverse the array in a different order or change the elements in the array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
40
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
41
DeckOfCards
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Run
42
13 Hearts (? )
Random shuffle
13 Diamonds (? )
13 Clubs (? )
DeckOfCards
Run
43
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
44
Copying Arrays
Often, in a program, you need to duplicate an array or a part of an array. In such cases you could attempt to use the assignment statement (=), as follows: list2 = list1;
Before the assignment list2 = list1; list1 After the assignment list2 = list1; list1
Contents of list1
Contents of list1
list2
list2
Contents of list2
Garbage
Contents of list2
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
45
Copying Arrays
Using a loop:
int[] sourceArray = {2, 3, 1, 5, 10}; int[] targetArray = new int[sourceArray.length];
for (int i = 0; i < sourceArrays.length; i++) targetArray[i] = sourceArray[i];
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
46
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
47
48
Anonymous Array
The statement
printArray(new int[]{3, 1, 2, 6, 4, 2});
There is no explicit reference variable for the array. Such array is called an anonymous array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
49
Pass By Value
Java uses pass by value to pass arguments to a method. There are important differences between passing a value of variables of primitive data types and passing arrays. For a parameter of a primitive type value, the actual value is passed. Changing the value of the local parameter inside the method does not affect the value of the variable outside the method.
For a parameter of an array type, the value of the parameter contains a reference to an array; this reference is passed to the method. Any changes to the array that occur inside the method body will affect the original array that was passed as the argument.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
50
Simple Example
public class Test { public static void main(String[] args) { int x = 1; // x represents an int value int[] y = new int[10]; // y represents an array of int values m(x, y); // Invoke m with arguments x and y
51
Call Stack
Stack Space required for method m int[] numbers:reference int number: 1 Space required for the main method int[] y: reference int x: 1 Heap
0 0
When invoking m(x, y), the values of x and y are passed to number and numbers. Since y contains the reference value to the array, numbers now contains the same reference value to the same array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
52
Call Stack
Stack Space required for method m int[] numbers:reference int number: 1001 Space required for the main method int[] y: reference int x: 1 Heap The arrays are stored in a heap. Array of ten int values is stored here
5555 0
When invoking m(x, y), the values of x and y are passed to number and numbers. Since y contains the reference value to the array, numbers now contains the same reference value to the same array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
53
Heap
Heap
5555 0
The JVM stores the array in an area of memory, called heap, which is used for dynamic memory allocation where blocks of memory are allocated and freed in an arbitrary order.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
54
Demonstrate differences of passing primitive data type variables and array variables.
TestPassArray Run
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
55
Example, cont.
Stack Space required for the swap method n2: 2 n1: 1 Space required for the main method int[] a reference Heap Stack Space required for the swapFirstTwoInArray method int[] array reference Space required for the main method int[] a reference
a[1]: 2 a[0]: 1
Invoke swap(int n1, int n2). The primitive type values in a[0] and a[1] are passed to the swap method.
Invoke swapFirstTwoInArray(int[] array). The reference value in a is passed to the swapFirstTwoInArray method.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
56
list
return result; }
result
int[] list1 = new int[]{1, 2, 3, 4, 5, 6}; int[] list2 = reverse(list1);
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
57
animation
list result
0
58
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
0
59
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
0
60
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
61
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
62
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
63
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
64
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
65
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
66
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
67
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
68
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
70
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
71
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
72
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
73
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
74
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
75
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
76
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
77
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
list result
1
78
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
animation
Return result
public static int[] reverse(int[] list) { int[] result = new int[list.length]; for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; } return result; }
list
list2
result
6 5 4 3 2 1
79
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Generate 100 lowercase letters randomly and assign to an array of characters. Count the occurrence of each letter in the array.
Space required for the createArray method char[] chars: ref Space required for the main method char[] chars: ref
Array of 100 characters Space required for the main method char[] chars: ref
CountLettersInArray
Run
80
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
Searching Arrays
Searching is the process of looking for a specific element in an array; for example, discovering whether a certain score is included in a list of scores. Searching is a common task in computer programming. There are many algorithms and data structures devoted to searching. In this section, two commonly used approaches are discussed, linear search and binary search.
public class LinearSearch { /** The method for finding a key in the list */ public static int linearSearch(int[] list, int key) { for (int i = 0; i < list.length; i++) [0] [1] [2] if (key == list[i]) return i; list return -1; key Compare key with list[i] for i = 0, 1, } }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
81
Linear Search
The linear search approach compares the key element, key, sequentially with each element in the array list. The method continues to do so until the key matches an element in the list or the list is exhausted without a match being found. If a match is made, the linear search returns the index of the element in the array that matches the key. If no match is found, the search returns -1.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
82
animation
List
6
6 6 6
4
4 4 4
1
1 1 1
9
9 9 9
7
7 7 7
3
3 3 3
2
2 2 2
8
8 8 8
6
6
4
4
1
1
9
9
7
7
3
3
2
2
8
8
83
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
84
Binary Search
For binary search to work, the elements in the array must already be ordered. Without loss of generality, assume that the array is in ascending order.
e.g., 2 4 7 10 11 45 50 59 60 66 69 70 79
The binary search first compares the key with the element in the middle of the array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
85
If the key is less than the middle element, you only need to search the key in the first half of the array. If the key is equal to the middle element, the search ends with a match. If the key is greater than the middle element, you only need to search the key in the second half of the array.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
86
animation
Binary Search
Key
8 8 8
List
1
1
2
2
3
3
4
4
6
6
7
7
8
8
9
9
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
87
key > 7
[0] [1] [2] [3] [4] [5] list 2 4 7 10 11 45 low mid high
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
88
high
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 50 59 60 66 69 70 79 low mid high
key < 66
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] list 59 60 66 69 70 79 low mid high
89
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
90
91
For the binarySearch method to work, the array must be pre-sorted in increasing order.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
92
Sorting Arrays
Sorting, like searching, is also a common task in computer programming. Many different algorithms have been developed for sorting. This section introduces two simple, intuitive sorting algorithms: selection sort and insertion sort.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
93
Selection Sort
Selection sort finds the largest number in the list and places it last. It then finds the largest number remaining and places it next to last, and so on until the list contains only a single number. Figure 6.17 shows how to sort the list {2, 9, 5, 4, 8, 1, 6} using selection sort.
swap Select 1 (the smallest) and swap it with 2 (the first) in the list 2 9 5 4 swap Select 2 (the smallest) and swap it with 9 (the first) in the remaining list Select 4 (the smallest) and swap it with 5 (the first) in the remaining list 5 is the smallest and in the right position. No swap is necessary Select 6 (the smallest) and swap it with 8 (the first) in the remaining list Select 8 (the smallest) and swap it with 9 (the first) in the remaining list Since there is only one element remaining in the list, sort is completed 1 9 5 4 8 2 6 The number 1 is now in the correct position and thus no longer needs to be considered. The number 2 is now in the correct position and thus no longer needs to be considered. The number 6 is now in the correct position and thus no longer needs to be considered. The number 5 is now in the correct position and thus no longer needs to be considered. The number 6 is now in the correct position and thus no longer needs to be considered. The number 8 is now in the correct position and thus no longer needs to be considered. 8 1 6
swap 1 2 5 4 8 9 6
9 swap
9 swap
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
94
list[0] list[1] list[2] list[3] ... list[0] list[1] list[2] list[3] ... list[0] list[1] list[2] list[3] ... list[0] list[1] list[2] list[3] ... list[0] list[1] list[2] list[3] ... ... list[0] list[1] list[2] list[3] ...
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
list[10]
95
for (int i = 0; i < listSize; i++) { select the smallest element in list[i..listSize-1]; swap the smallest with list[i], if necessary; // list[i] is in its correct position. // The next iteration apply on list[i..listSize-1] }
Expand
double currentMin = list[i]; int currentMinIndex = i; for (int j = i; j < list.length; j++) { if (currentMin > list[j]) { currentMin = list[j]; currentMinIndex = j; } }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
96
for (int i = 0; i < listSize; i++) { select the smallest element in list[i..listSize-1]; swap the smallest with list[i], if necessary; // list[i] is in its correct position. // The next iteration apply on list[i..listSize-1] }
Expand
double currentMin = list[i]; int currentMinIndex = i; for (int j = i; j < list.length; j++) { if (currentMin > list[j]) { currentMin = list[j]; currentMinIndex = j; } }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
97
for (int i = 0; i < listSize; i++) { select the smallest element in list[i..listSize-1]; swap the smallest with list[i], if necessary; // list[i] is in its correct position. // The next iteration apply on list[i..listSize-1] }
Expand
if (currentMinIndex != i) { list[currentMinIndex] = list[i]; list[i] = currentMin; }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
98
Wrap it in a Method
/** The method for sorting the numbers */ public static void selectionSort(double[] list) { for (int i = 0; i < list.length; i++) { // Find the minimum in the list[i..list.length-1] double currentMin = list[i]; int currentMinIndex = i; for (int j = i + 1; j < list.length; j++) { if (currentMin > list[j]) { currentMin = list[j]; currentMinIndex = j; } } // Swap list[i] with list[currentMinIndex] if necessary; if (currentMinIndex != i) { list[currentMinIndex] = list[i]; list[i] = currentMin; Invoke it } } selectionSort(yourList) }
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
99
Insertion Sort
int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted The insertion sort algorithm sorts a list of values by repeatedly inserting an unsorted element into a sorted sublist until the whole list is sorted.
Step 1: Initially, the sorted sublist contains the first element in the list. Insert 9 to the sublist. Step2: The sorted sublist is {2, 9}. Insert 5 to the sublist. Step 3: The sorted sublist is {2, 5, 9}. Insert 4 to the sublist. Step 4: The sorted sublist is {2, 4, 5, 9}. Insert 8 to the sublist. Step 5: The sorted sublist is {2, 4, 5, 8, 9}. Insert 1 to the sublist. Step 6: The sorted sublist is {1, 2, 4, 5, 8, 9}. Insert 6 to the sublist. Step 7: The entire list is now sorted 2 9 5 4 8 1 6
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
100
animation
Insertion Sort
int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted
6 2 9 4 5 5 4 9 8 8 1 1 6 6
2
2 1
5
4 2
9
5 4
4
8 5
8
9 6
1
1 8
6
2 6
1
9
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
101
How to Insert?
The insertion sort algorithm sorts a list of values by repeatedly inserting an unsorted element into a sorted sublist until the whole list is sorted.
[0] [1] [2] [3] [4] [5] [6] list 2 5 9 4 Step 1: Save 4 to a temporary variable currentElement
[0] [1] [2] [3] [4] [5] [6] list 2 5 9 Step 2: Move list[2] to list[3]
[0] [1] [2] [3] [4] [5] [6] list 2 5 9 Step 3: Move list[1] to list[2]
[0] [1] [2] [3] [4] [5] [6] list 2 4 5 9 Step 4: Assign currentElement to list[1]
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
102
InsertSort
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
103
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807
104