programming in java (cop 2250) lecture 16-18 chengyong yang fall, 2005

69
Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

Upload: kathlyn-parks

Post on 04-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

Programming in Java (COP 2250)

Lecture 16-18

Chengyong Yang

Fall, 2005

Page 2: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_2

Chapter 6

Method Design

Testing

Page 3: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_3

Method Design

• As we've discussed, high-level design issues include:

– identifying primary classes and objects

– assigning primary responsibilities

• After establishing high-level design issues, its important to address low-level issues such as the design of key methods

• For some methods, careful planning is needed to make sure they contribute to an efficient and elegant system design

Page 4: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_4

Method Design

• An algorithm is a step-by-step process for solving a problem

• Examples: a recipe, travel directions

• Every method implements an algorithm that determines how the method accomplishes its goals

• An algorithm may be expressed in pseudocode, a mixture of code statements and English that communicate the steps to take

Page 5: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_5

Method Decomposition

• A method should be relatively small, so that it can be understood as a single entity

• A potentially large method should be decomposed into several smaller methods as needed for clarity

• A public service method of an object may call one or more private support methods to help it accomplish its goal

• Support methods might call other support methods if appropriate

Page 6: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_6

Objects as Parameters

• Another important issue related to method design involves parameter passing

• Parameters in a Java method are passed by value

• A copy of the actual parameter (the value passed in) is stored into the formal parameter (in the method header)

• Therefore passing parameters is similar to an assignment statement

• When an object is passed to a method, the actual parameter and the formal parameter become aliases of each other

Page 7: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_7

Passing Objects to Methods

• What a method does with a parameter may or may not have a permanent effect (outside the method)

• See ParameterTester.java (page 327)

• See ParameterModifier.java (page 329)

• See Num.java (page 330)

• Note the difference between changing the internal state of an object versus changing which object a reference points to

Page 8: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_8

Method Overloading

• Method overloading is the process of giving a single method name multiple definitions

• If a method is overloaded, the method name is not sufficient to determine which method is being called

• The signature of each overloaded method must be unique

• The signature includes the number, type, and order of the parameters

Page 9: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_9

Method Overloading

• The compiler determines which method is being invoked by analyzing the parameters

float tryMe(int x){ return x + .375;}

float tryMe(int x, float y){ return x*y;}

result = tryMe(25, 4.32)

Invocation

Page 10: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_10

Method Overloading

• The println method is overloaded:

println (String s)

println (int i)

println (double d)

and so on...

• The following lines invoke different versions of the println method:

System.out.println ("The total is:");

System.out.println (total);

Page 11: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_11

Overloading Methods

• The return type of the method is not part of the signature

• That is, overloaded methods cannot differ only by their return type

• Constructors can be overloaded

• Overloaded constructors provide multiple ways to initialize a new object

Page 12: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_12

Outline

Method Design

Testing

Page 13: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_13

Testing

• Testing can mean many different things

• It certainly includes running a completed program with various inputs

• It also includes any evaluation performed by human or computer to assess quality

• Some evaluations should occur before coding even begins

• The earlier we find an problem, the easier and cheaper it is to fix

Page 14: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_14

Testing

• The goal of testing is to find errors

• As we find and fix errors, we raise our confidence that a program will perform as intended

• We can never really be sure that all errors have been eliminated

• So when do we stop testing?

– Conceptual answer: Never

– Snide answer: When we run out of time

– Better answer: When we are willing to risk that an undiscovered error still exists

Page 15: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_15

Reviews

• A review is a meeting in which several people examine a design document or section of code

• It is a common and effective form of human-based testing

• Presenting a design or code to others:

– makes us think more carefully about it

– provides an outside perspective

• Reviews are sometimes called inspections or walkthroughs

Page 16: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_16

Test Cases

• A test case is a set of input and user actions, coupled with the expected results

• Often test cases are organized formally into test suites which are stored and reused as needed

• For medium and large systems, testing must be a carefully managed process

• Many organizations have a separate Quality Assurance (QA) department to lead testing efforts

Page 17: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_17

Defect and Regression Testing

• Defect testing is the execution of test cases to uncover errors

• The act of fixing an error may introduce new errors

• After fixing a set of errors we should perform regression testing – running previous test suites to ensure new errors haven't been introduced

• It is not possible to create test cases for all possible input and user actions

• Therefore we should design tests to maximize their ability to find problems

Page 18: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_18

Black-Box Testing

• In black-box testing, test cases are developed without considering the internal logic

• They are based on the input and expected output

• Input can be organized into equivalence categories

• Two input values in the same equivalence category would produce similar results

• Therefore a good test suite will cover all equivalence categories and focus on the boundaries between categories

Page 19: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_19

White-Box Testing

• White-box testing focuses on the internal structure of the code

• The goal is to ensure that every path through the code is tested

• Paths through the code are governed by any conditional or looping statements in a program

• A good testing effort will include both black-box and white-box tests

Page 20: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_20

Arrays

• Arrays are objects that help us organize large amounts of information

• Chapter 7 focuses on:

– array declaration and use– bounds checking and capacity– arrays that store object references– variable length parameter lists– multidimensional arrays– the ArrayList class

Page 21: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_21

Outline

Declaring and Using Arrays

Arrays of Objects

Variable Length Parameter Lists

Two-Dimensional Arrays

The ArrayList Class

Polygons and Polylines

Mouse Events and Key Events

Page 22: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_22

Arrays

• An array is an ordered list of values

0 1 2 3 4 5 6 7 8 9

79 87 94 82 67 98 87 81 74 91

An array of size N is indexed from zero to N-1

scores

The entire arrayhas a single name

Each value has a numeric index

This array holds 10 values that are indexed from 0 to 9

Page 23: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_23

Arrays

• A particular value in an array is referenced using the array name followed by the index in brackets

• For example, the expression

scores[2]

refers to the value 94 (the 3rd value in the array)

• That expression represents a place to store a single integer and can be used wherever an integer variable can be used

Page 24: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_24

Arrays

• For example, an array element can be assigned a value, printed, or used in a calculation:

scores[2] = 89;

scores[first] = scores[first] + 2;

mean = (scores[0] + scores[1])/2;

System.out.println ("Top = " + scores[5]);

Page 25: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_25

Arrays• The values held in an array are called array

elements

• An array stores multiple values of the same type – the element type

• The element type can be a primitive type or an object reference

• Therefore, we can create an array of integers, an array of characters, an array of String objects, an array of Coin objects, etc.

• In Java, the array itself is an object that must be instantiated

Page 26: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_26

Arrays

• Another way to depict the scores array:

scores 79

87

94

82

67

98

87

81

74

91

Page 27: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_27

Declaring Arrays

• The scores array could be declared as follows:

int[] scores = new int[10];

• The type of the variable scores is int[] (an array of integers)

• Note that the array type does not specify its size, but each object of that type has a specific size

• The reference variable scores is set to a new array object that can hold 10 integers

Page 28: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_28

Declaring Arrays

• Some other examples of array declarations:

float[] prices = new float[500];

boolean[] flags;

flags = new boolean[20];

char[] codes = new char[1750];

Page 29: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_29

Using Arrays

• The iterator version of the for loop can be used when processing array elements

for (int score : scores) System.out.println (score);

• This is only appropriate when processing all array elements from top (lowest index) to bottom (highest index)

• See BasicArray.java (page 372)

Page 30: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_30

Bounds Checking

• Once an array is created, it has a fixed size

• An index used in an array reference must specify a valid element

• That is, the index value must be in range 0 to N-1

• The Java interpreter throws an ArrayIndexOutOfBoundsException if an array index is out of bounds

• This is called automatic bounds checking

Page 31: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_31

Bounds Checking

• For example, if the array codes can hold 100 values, it can be indexed using only the numbers 0 to 99

• If the value of count is 100, then the following reference will cause an exception to be thrown:

System.out.println (codes[count]);

• It’s common to introduce off-by-one errors when using arrays

for (int index=0; index <= 100; index++)codes[index] = index*50 + epsilon;

problem

Page 32: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_32

Bounds Checking

• Each array object has a public constant called length that stores the size of the array

• It is referenced using the array name:

scores.length

• Note that length holds the number of elements, not the largest index

• See ReverseOrder.java (page 375)

• See LetterCount.java (page 376)

Page 33: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_33

Alternate Array Syntax

• The brackets of the array type can be associated with the element type or with the name of the array

• Therefore the following two declarations are equivalent:

float[] prices;

float prices[];

• The first format generally is more readable and should be used

Page 34: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_34

Initializer Lists

• An initializer list can be used to instantiate and fill an array in one step

• The values are delimited by braces and separated by commas

• Examples:

int[] units = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476};

char[] letterGrades = {'A', 'B', 'C', 'D', ’F'};

Page 35: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_35

Initializer Lists

• Note that when an initializer list is used:

– the new operator is not used

– no size value is specified

• The size of the array is determined by the number of items in the initializer list

• An initializer list can be used only in the array declaration

• See Primes.java (page 381)

Page 36: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_36

Arrays as Parameters

• An entire array can be passed as a parameter to a method

• Like any other object, the reference to the array is passed, making the formal and actual parameters aliases of each other

• Therefore, changing an array element within the method changes the original

• An individual array element can be passed to a method as well, in which case the type of the formal parameter is the same as the element type

Page 37: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_37

Outline

Declaring and Using Arrays

Arrays of Objects

Variable Length Parameter Lists

Two-Dimensional Arrays

The ArrayList Class

Page 38: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_38

Arrays of Objects

• The elements of an array can be object references

• The following declaration reserves space to store 5 references to String objects

String[] words = new String[5];

• It does NOT create the String objects themselves

• Initially an array of objects holds null references

• Each object stored in an array must be instantiated separately

Page 39: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_39

Arrays of Objects

• The words array when initially declared:

words -

-

-

-

-

• At this point, the following reference would throw a NullPointerException:

System.out.println (words[0]);

Page 40: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_40

Arrays of Objects

• After some String objects are created and stored in the array:

“friendship”

words

-

-

“loyalty”

“honor”

Page 41: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_41

Arrays of Objects

• Keep in mind that String objects can be created using literals

• The following declaration creates an array object called verbs and fills it with four String objects created using string literals

String[] verbs = {"play", "work", "eat", "sleep"};

Page 42: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_42

Arrays of Objects

• The following example creates an array of Grade objects, each with a string representation and a numeric lower bound

• See GradeRange.java (page 384)• See Grade.java (page 385)

• Now let's look at an example that manages a collection of CD objects

• See Tunes.java (page 387)• See CDCollection.java (page 388)• See CD.java (page 391)

Page 43: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_43

Arrays of Objects

• A UML diagram for the Tunes program:

Tunes

+ main (args : String[]) : void

CDCollection

- collection : CD[]- count : int- totalCost : double

+ addCD (title : String, artist : String, cost : double, tracks : int) : void+ toString() : String- increaseSize() : voidCD

- title : String- artist : String- cost : double- tracks : int

+ toString() : String

*

1

Page 44: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_44

Command-Line Arguments

• The signature of the main method indicates that it takes an array of String objects as a parameter

• These values come from command-line arguments that are provided when the interpreter is invoked

• For example, the following invocation of the interpreter passes three String objects into main:

> java StateEval pennsylvania texas arizona

• These strings are stored at indexes 0-2 of the array parameter of the main method

• See NameTag.java (page 393)

Page 45: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_45

Outline

Declaring and Using Arrays

Arrays of Objects

Variable Length Parameter Lists

Two-Dimensional Arrays

The ArrayList Class

Page 46: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_46

Variable Length Parameter Lists

• Suppose we wanted to create a method that processed a different amount of data from one invocation to the next

• For example, let's define a method called average that returns the average of a set of integer parameters

// one call to average three valuesmean1 = average (42, 69, 37);

// another call to average seven valuesmean2 = average (35, 43, 93, 23, 40, 21, 75);

Page 47: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_47

Variable Length Parameter Lists

• We could define overloaded versions of the average method

– Downside: we'd need a separate version of the method for each parameter count

• We could define the method to accept an array of integers

– Downside: we'd have to create the array and store the integers prior to calling the method each time

• Instead, Java provides a convenient way to create variable length parameter lists

Page 48: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_48

Variable Length Parameter Lists

• Using special syntax in the formal parameter list, we can define a method to accept any number of parameters of the same type

• For each call, the parameters are automatically put into an array for easy processing in the method

public double average (int ... list){ // whatever} element

typearrayname

Indicates a variable length parameter list

Page 49: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_49

Variable Length Parameter Lists

public double average (int ... list){ double result = 0.0;

if (list.length != 0) { int sum = 0; for (int num : list) sum += num; result = (double)num / list.length; }

return result;}

Page 50: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_50

Variable Length Parameter Lists

• The type of the parameter can be any primitive or object type

public void printGrades (Grade ... grades){ for (Grade letterGrade : grades) System.out.println (letterGrade);}

Page 51: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_51

Variable Length Parameter Lists

• A method that accepts a variable number of parameters can also accept other parameters

• The following method accepts an int, a String object, and a variable number of double values into an array called nums

public void test (int count, String name, double ... nums){ // whatever}

Page 52: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_52

Variable Length Parameter Lists

• The varying number of parameters must come last in the formal arguments

• A single method cannot accept two sets of varying parameters

• Constructors can also be set up to accept a variable number of parameters

• See VariableParameters.java (page 396)• See Family.java (page 397)

Page 53: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_53

Outline

Declaring and Using Arrays

Arrays of Objects

Variable Length Parameter Lists

Two-Dimensional Arrays

The ArrayList Class

Page 54: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_54

Two-Dimensional Arrays

• A one-dimensional array stores a list of elements

• A two-dimensional array can be thought of as a table of elements, with rows and columns

onedimension

twodimensions

Page 55: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_55

Two-Dimensional Arrays

• To be precise, in Java a two-dimensional array is an array of arrays

• A two-dimensional array is declared by specifying the size of each dimension separately:

int[][] scores = new int[12][50];

• A array element is referenced using two index values:

value = scores[3][6]

• The array stored in one row can be specified using one index

Page 56: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_56

Two-Dimensional Arrays

Expression Type Description

table int[][] 2D array of integers, or

array of integer arrays

table[5] int[] array of integers

table[5][12] int integer

• See TwoDArray.java (page 399)

• See SodaSurvey.java (page 400)

Page 57: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_57

Multidimensional Arrays

• An array can have many dimensions – if it has more than one dimension, it is called a multidimensional array

• Each dimension subdivides the previous one into the specified number of elements

• Each dimension has its own length constant

• Because each dimension is an array of array references, the arrays within one dimension can be of different lengths

– these are sometimes called ragged arrays

Page 58: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_58

Outline

Declaring and Using Arrays

Arrays of Objects

Variable Length Parameter Lists

Two-Dimensional Arrays

The ArrayList Class

Page 59: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_59

The ArrayList Class

• The ArrayList class is part of the java.util package

• Like an array, it can store a list of values and reference each one using a numeric index

• However, you cannot use the bracket syntax with an ArrayList object

• Furthermore, an ArrayList object grows and shrinks as needed, adjusting its capacity as necessary

Page 60: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_60

The ArrayList Class

• Elements can be inserted or removed with a single method invocation

• When an element is inserted, the other elements "move aside" to make room

• Likewise, when an element is removed, the list "collapses" to close the gap

• The indexes of the elements adjust accordingly

Page 61: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_61

The ArrayList Class

• An ArrayList stores references to the Object class, which allows it to store any kind of object

• See Beatles.java (page 405)

• We can also define an ArrayList object to accept a particular type of object

• The following declaration creates an ArrayList object that only stores Family objects

ArrayList<Family> reunion = new ArrayList<Family>

• This is an example of generics, which are discussed further in Chapter 12

Page 62: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_62

ArrayList Efficiency

• The ArrayList class is implemented using an underlying array

• The array is manipulated so that indexes remain continuous as elements are added or removed

• If elements are added to and removed from the end of the list, this processing is fairly efficient

• But as elements are inserted and removed from the front or middle of the list, the remaining elements are shifted

Page 63: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_63

Sorting

• Sorting is the process of arranging a list of items in a particular order

• The sorting process is based on specific value(s)

– sorting a list of test scores in ascending numeric order

– sorting a list of people alphabetically by last name

• There are many algorithms, which vary in efficiency, for sorting a list of items

• We will examine two specific algorithms:

– Selection Sort

– Insertion Sort

Page 64: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_64

Selection Sort

• The approach of Selection Sort:

– select a value and put it in its final place into the list

– repeat for all other values

• In more detail:

– find the smallest value in the list

– switch it with the value in the first position

– find the next smallest value in the list

– switch it with the value in the second position

– repeat until all values are in their proper places

Page 65: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_65

Selection Sort

• An example:

original: 3 9 6 1 2

smallest is 1: 1 9 6 3 2

smallest is 2: 1 2 6 3 9

smallest is 3: 1 2 3 6 9

smallest is 6: 1 2 3 6 9

• Each time, the smallest remaining value is found and exchanged with the element in the "next" position to be filled

Page 66: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_66

Swapping

• The processing of the selection sort algorithm includes the swapping of two values

• Swapping requires three assignment statements and a temporary storage location:

temp = first;

first = second;

second = temp;

Page 67: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_67

Insertion Sort• The approach of Insertion Sort:

– pick any item and insert it into its proper place in a sorted sublist

– repeat until all items have been inserted

• In more detail:

– consider the first item to be a sorted sublist (of one item)

– insert the second item into the sorted sublist, shifting the first item as needed to make room to insert the new addition

– insert the third item into the sorted sublist (of two items), shifting items as necessary

– repeat until all values are inserted into their proper positions

Page 68: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_68

Insertion Sort

• An example:

original: 3 9 6 1 2

insert 9: 3 9 6 1 2

insert 6: 3 6 9 1 2

insert 1: 1 3 6 9 2

insert 2: 1 2 3 6 9

• See Sorting.java and SortTest.java

Page 69: Programming in Java (COP 2250) Lecture 16-18 Chengyong Yang Fall, 2005

16-18_69

Comparing Sorts

• The Selection and Insertion sort algorithms are similar in efficiency

• They both have outer loops that scan all elements, and inner loops that compare the value of the outer loop with almost all values in the list

• Approximately n2 number of comparisons are made to sort a list of size n

• We therefore say that these sorts are of order n2

• Other sorts are more efficient: order n log2 n