1,冒泡排序
算法描述:比较相邻两个元素大小,若反序,则将两个元素进行交换。若按升序进行排序,每进行一次循环可将序列中最大元素交换到最后位置,如同气泡在水中冒出。
算法API实现如下:
public class BubbleSort {
//对数组array中的元素进行排序
public static void sort(Comparable[] array) {
for (int i = array.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
//比较索引j和j+1处的值
if (greater(array[j], array[j + 1])) {
exchange(array,j,j+1);
}
}
}
}
//判断x是否大于y
private static boolean greater(Comparable x, Comparable y) {
return x.compareTo(y) > 0;
}
//数组索引i处元素和j处元素交换位置
private static void exchange(Comparable[] array, int i, int j) {
Comparable temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
2,直接插入排序
算法描述:设有一元素个数为 n 的线性序列
(1)进行第 i (1 =< i < n)次循环,假设前 i 个元素构成的子序列是排序的,将第 i 个元素插入到该前 i 个元素构成的子序列的适当位置,使得插入后的序列仍然是排序的,第 i 个元素的插入位置由其大小确定;
(2)重复进行(1)的操作,n 个元素共需要进行 n - 1循环进行排序,每次循环将一个元素插入前面的子序列。
算法API实现如下:
/**
* 插入算法API
*/
public class InsertionSort {
public static void sort(Comparable[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = i; j > 0; j--) {
if(greater(array[j-1],array[j])){
exchange(array,j-1,j);
}else
break;
}
}
}
private static boolean greater(Comparable x, Comparable y) {
return x.compareTo(y) > 0;
}
private static void exchange(Comparable[] array, int i, int j) {
Comparable temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
3,直接选择排序
算法描述:第一次循环从 n (n>0) 个元素的数据中选择出一个假定最大或最小的元素放到最前或最后位置,下一次再从 n - 1 个元素中选出最大或最小的元素并放到次前或次后位置,以此类推,经过 n - 1 次完成排序。
算法API实现如下:
/**
* 直接选择排序API
*/
public class SelectionSort {
public static void sort(Comparable[] array) {
for (int i = 0; i <= array.length - 2; i++) {
int minIndex = i;
for (int j = i + 1; j < array.length; j++) {
if (greater(array[minIndex], array[j])) {
minIndex = j;
}
}
exchange(array, i, minIndex);
}
}
//比较元素x和y的大小
private static boolean greater(Comparable x, Comparable y) {
return x.compareTo(y) > 0;
}
//数组元素array[i]和array[j]交换位置
private static void exchange(Comparable[] array, int i, int j) {
Comparable temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
以上三个基本算法均为算法API读者需自行建立实现类调用上述API加以实现。
由于个人水平有限,上述算法描述或算法API可能多有不足之处,错误之处望加以指正,感激不尽。