carfield.com.hkBubbleSort.java2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.java;
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the design patterns project at UBC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ca.ubc.cs.spl.patterns.
*
* Contributor(s):
*/
/**
* Implements the bubblesort sorting strategy for int arrays.
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
*/
public class BubbleSort implements SortingStrategy {
/**
* Helper method that exchanges two values in an int array
*
* @param numbers the int array
* @param pos1 the position of the first element
* @param pos2 the position of the second element
*/
private void exchange(int[] numbers, int pos1, int pos2) {
int tmp = numbers[pos1];
numbers[pos1] = numbers[pos2];
numbers[pos2] = tmp;
}
/**
* Sorts an int array
*
* @param numbers the int array to sort
*/
public void sort(int[] numbers) {
System.out.println("Sorting by BubbleSort...");
for (int end = numbers.length; end > 1; end --) {
for (int current = 0; current < end - 1; current ++) {
if (numbers[current] > numbers[current+1]) {
exchange(numbers, current, current+1);
}
}
}
}
}
</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00ZLinearSort.java2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.java;
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the design patterns project at UBC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ca.ubc.cs.spl.patterns.
*
* Contributor(s):
*/
/**
* Implements the linear sort sorting strategy for int arrays.
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
*/
public class LinearSort implements SortingStrategy{
/**
* Helper method that exchanges two values in an int array
*
* @param numbers the int array
* @param pos1 the position of the first element
* @param pos2 the position of the second element
*/
private void exchange(int[] numbers, int pos1, int pos2) {
int tmp = numbers[pos1];
numbers[pos1] = numbers[pos2];
numbers[pos2] = tmp;
}
/**
* Sorts an int array
*
* @param numbers the int array to sort
*/
public void sort(int[] numbers) {
System.out.println("Sorting by LinearSort...");
int lowest = 0;
for (int start = 0; start < numbers.length; start ++) {
lowest = start;
for (int current = start; current < numbers.length; current ++) {
if (numbers[current] < numbers[lowest]) {
lowest = current;
}
}
exchange(numbers, start, lowest);
}
}
}</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00ZMain.java2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.java;
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the design patterns project at UBC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ca.ubc.cs.spl.patterns.
*
* Contributor(s):
*/
/**
* Implements the driver for the strategy design pattern example.<p>
*
* Intent: <i>Define a family of algorithms, encapsulate each one, and make
* them interchangeable. Strategy lets the algorithm vary independently from
* clients that use it.</i><p>
*
* Participatng objects are <code>LinearSort</code> and <i>BubbleSort</i>
* as <i>Strategies</i>, and <code>Sorter</code> as <i>Context</i>.
*
* In this example, an array of 10 numbers is to be sorted. Depending on the
* number of arguments of the call to <code>Main</code>, linear sort or
* bubblesort are used as sorting algorithms. The interface for the strategies
* is defined in <code>SortingStrategy</code>.
*
* <p><i>This is the Java version.</i><p>
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
* @see LinearSort
* @see BubbleSort
*/
public class Main {
/**
* Implements the driver for the strategy example. If called with more
* than zero arguments, bubblesort is used to sort the array of ten
* numbers; otherwise linear sort.
*/
public static void main(String[] args) {
int[] numbers = {3, 2, 6, 8, 1, 5, 6, 4, 7, 0};
SortingStrategy sort1 = new LinearSort();
SortingStrategy sort2 = new BubbleSort();
Sorter sorter;
if (args.length == 0) {
sorter = new Sorter(sort1, numbers);
}
else {
sorter = new Sorter(sort2, numbers);
}
}
}
</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00ZSorter.java2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.java;
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the design patterns project at UBC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ca.ubc.cs.spl.patterns.
*
* Contributor(s):
*/
/**
* Sorts an int array with a provided sorting strategy.
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
* @see LinearSort
* @see BubbleSort
*/
public class Sorter {
/**
* Returns the content of the int array in a string
*
* @param numbers the int array to display
* @returns a string with all the ints from the array
*/
private static String show(int[] numbers) {
String out = "";
for (int i=0; i<numbers.length; i++)
{
out += (numbers[i] + " ");
}
return out;
}
/**
* Shows the original (unsorted) array, sorts it and shows the new
* (sorted) array.
*
* @param sort the sorting strategy
* @param numbers the array of int to sort
*/
public Sorter(SortingStrategy sort, int[] numbers) {
System.out.println("\nPreparing sort...");
System.out.println("original: "+show(numbers));
sort.sort(numbers);
System.out.println("sorted: "+show(numbers));
}
}</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00ZSortingStrategy.java2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><TEXTAREA name="code" class="java" rows="16" cols="100">package examples.strategy.java;
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the design patterns project at UBC
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is ca.ubc.cs.spl.patterns.
*
* Contributor(s):
*/
/**
* Defines the interface for sorting strategies
*
* @author Jan Hannemann
* @author Gregor Kiczales
* @version 1.0, 05/13/02
*
*/
public interface SortingStrategy {
public void sort(int[] numbers);
}
</TEXTAREA><br><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00Zfiles.lst2004-03-24T16:00:00Z2004-03-24T16:00:00Z<br/><br/><script type="text/javascript"><!--google_ad_client = "pub-9426659565807829";google_ad_slot = "9359905831";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>2004-03-24T16:00:00Z