Java排序算法

回顾一下排序算法

 

稍微地设计一下基础类:

package algorithms; /** * @author Lansine * */ public abstract class Sorter<T extends Comparable<T>> { public abstract void sort(T[] array); protected void swap(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } }

 

插入排序:

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

package algorithms; /** * @author Lansine * */ public class InsertSorter<T extends Comparable<T>> extends Sorter<T> { /* * (非 Javadoc) * * @see algorithms.Sorter#sort(T[]) */ @Override public void sort(T[] array) { for (int i = 1; i < array.length; i++) { T temp = array[i]; int j = i; for (; j > 0; j--) { if (temp.compareTo(array[j - 1]) < 0) { array[j] = array[j - 1]; } else break; } array[j] = temp; } } }

 

冒泡排序: 

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
package algorithms; public class BubbleSorter<T extends Comparable<T>> extends Sorter<T> { public void sort(T[] array) { for (int i = array.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (array[j + 1].compareTo(array[j]) < 0) { swap(array, j, j + 1); } } } } }

 

选择排序:

选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。

package algorithms; /** * @author Lansine * */ public class SelectSorter<T extends Comparable<T>> extends Sorter<T> { /* * (非 Javadoc) * * @see algorithms.Sorter#sort(T[]) */ @Override public void sort(T[] array) { for (int i = 0; i < array.length - 1; i++) { int minIndex = i; for (int j = i + 1; j < array.length; j++) { if (array[minIndex].compareTo(array[j]) > 0) { minIndex = j; } } swap(array, minIndex, i); } } }

你可能感兴趣的:(java,算法,Class,javadoc)