先编写一些常用的函数:
/**
* 交换i,j俩个位置的数
* @param intArray
* @param i
* @param j
*/
public void swap(int[] intArray, int i, int j) {
int temp = intArray[i];
intArray[i] = intArray[j];
intArray[j] = temp;
}
/**
* 返回最小值下标
*
* @param intArray 数组
* @param len 寻找的长度
* @return 该范围内的最小值
*/
public int minSubScript(int[] intArray, int len) {
if (intArray.length == 0) return -1;
int minSub = 0;
for (int i = 1; i < len; i++) minSub = intArray[minSub] < intArray[i] ? minSub : i;
return minSub;
}
/**
* 返回最大值下标
*
* @param intArray 目标数组
* @param len 寻找的长度
* @return 该范围内最大值下标
*/
public int maxSubScript(int[] intArray, int len) {
if (intArray.length == 0) return -1;
int maxSub = 0;
for (int i = 1; i < len; i++) maxSub = intArray[maxSub] > intArray[i] ? maxSub : i;
return maxSub;
}
/**
* 递归返回数组最小值
*
* @param intArray 目标数组
* @param len 寻找的长度
* @return 该长度范围内的最小值
*/
public int findTheMin(int[] intArray, int len) {
if (len == 1) return intArray[0];
int nextLevelMin = findTheMin(intArray, len - 1);
return Math.min(intArray[len - 1], nextLevelMin);
}
/**
* 递归返回数组最大值
*
* @param intArray 目标数组
* @param len 寻找的长度
* @return 该长度范围内的最大值
*/
public int findTheMax(int[] intArray, int len) {
if (len == 1) return intArray[0];
int nextLevelMin = findTheMin(intArray, len - 1);
return Math.max(intArray[len - 1], nextLevelMin);
}
冒泡排序
/**
* 冒泡排序,将大的数慢慢冒出,每次冒出的数字下标此处称作游标
*
* @param intArray 目标数组
* @return 排序后的数组
*/
public int[] bubbleSort(int[] intArray) {
for (int i = 0; i < intArray.length; i++) { //冒泡的次数
for (int j = 1; j < intArray.length - i; j++) {//游标的位置,游标的最大位置即冒泡的终点
//每次比较要进行的操作
if (intArray[j - 1] > intArray[j]) swap(intArray, j, j - 1);
}
}
return intArray;
}
选择排序
/**
* 选择排序,在未拍序列中选择最大的一个数字放入未排序列的末尾
*
* @param intArray 目标数组
* @return 排序后的数组
*/
public int[] selectSort(int[] intArray) {
for (int i = intArray.length - 1; i > 0; i--) {//需要选择放入的位置,第intArray[0]位置不用放
swap(intArray, i, maxSubScript(intArray, i));
}
return intArray;
}
插入排序
/**
* 插入排序,从头依次检查每个位置的数,插入到其前面最适当的位置
*
* @param intArray 目标数组
* @return 结果数组
*/
public int[] insertSort(int[] intArray) {
for (int i = 1; i < intArray.length; i++) {
int temp = intArray[i];//要插入的值
int m = i;//拷贝需多次赋值变量
while (m != 0 && intArray[m - 1] > temp) {
intArray[m] = intArray[m - 1];
m--;
}
intArray[m] = temp;
}
return intArray;
}