return source;
}
/**
* 快速排序 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 步骤为:
* 1. 从数列中挑出一个元素,称为 "基准"(pivot), 2.
* 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面
* (相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。 3.
* 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
* 递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了
* 。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
*
* @since 1.1
* @param source
* 需要进行排序操作的数组
* @return 排序后的数组
*/
public static int[] quickSort(int[] source) {
return qsort(source, 0, source.length - 1);
}
/**
* 快速排序的具体实现,排正序
*
* @since 1.1
* @param source
* 需要进行排序操作的数组
* @param low
* 开始低位
* @param high
* 结束高位
* @return 排序后的数组
*/
private static int[] qsort(int source[], int low, int high) {
int i, j, x;
if (low < high) {
i = low;
j = high;
x = source[i];
while (i < j) {
while (i < j && source[j] > x) {
j--;
}
if (i < j) {
source[i] = source[j];
i++;
}
while (i < j && source[i] < x) {
i++;
}
if (i < j) {
source[j] = source[i];
j--;
}
}
source[i] = x;
qsort(source, low, i - 1);
qsort(source, i + 1, high);
}
return source;
}
// /////////////////////////////////////////////
// 排序算法结束
/**
* 二分法查找 查找线性表必须是有序列表
*
* @since 1.1
* @param source
* 需要进行查找操作的数组
* @return 需要查找的值在数组中的位置,若未查到则返回-1
*/
public static int[] binarySearch(int[] source) {
int i,j;
int low, high, mid;
int temp;
for (i = 0; i < source.length; i++) {
temp=source[i];
low=0;
high=i-1;
while (low <= high) {
mid = (low + high)/2;
if (source[mid]>temp) {
high=mid-1;
} else {
low = mid + 1;
}
}
for (j= i-1; j>high;j--)
source[j+1]=source[j];
source[high+1]=temp;
}
return source;
}
/**
* 反转数组
*
* @since 1.1
* @param source
* 需要进行反转操作的数组
* @return 反转后的数组
*/
public static int[] reverse(int[] source) {
int length = source.length;
int temp = 0;
for (int i = 0; i < length >> 1; i++) {
temp = source[i];
source[i] = source[length - 1 - i];
source[length - 1 - i] = temp;
}
return source;
}
/**
* 在当前位置插入一个元素,数组中原有元素向后移动; 如果插入位置超出原数组,则抛IllegalArgumentException异常
*
* @param array
* @param index
* @param insertNumber
* @return
*/
public static int[] insert(int[] array, int index, int insertNumber) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException();
}
if (index -