冒泡
public String[]bubble_sort(String[]arr) {
//外层循环控制循环次数
for (inti = 0; i < arr.length; i++) {
//内层循环控制需要比较的次数
for (intj = 0; j < arr.length - 1 - i; j++) {
// 字符串比较用compareTo方法,大的向后排
if (arr[j].compareTo(arr[j + 1]) > 0){
String temp = arr[j];
arr[j] =arr[j + 1];
arr[j + 1] =temp;
}
}
}
return arr;
}
选择
public String[]select_sort(String[]arr) {
for (inti = 0; i < arr.length - 1; i++) {
for (intj = i + 1; j < arr.length;j++) {
if (arr[i].compareTo(arr[j]) > 0) { String temp = arr[i];
arr[i] =arr[j];
arr[j] =temp;
}
}
}
return arr;
}
插入
public String[]insert_sort(String[]arr) {
//从第二个位置,即下标为1的元素开始向前插入
for (inti = 1; i < arr.length; i++) {
// 插入排序从第i个元素开始向前比较,如果小于前一个元素,交换位置
for (intj = i; j > 0; j--) {
if (arr[j].compareTo(arr[j - 1]) < 0){
String temp = arr[j];
arr[j] =arr[j - 1];
arr[j - 1] =temp;
} else {
break;
}
}
}
return arr;
}
希尔
public String[]shell_sort(String[]arr) {
int len = arr.length;
// 初始步长 gap = n / 2
for (intgap = len / 2;gap > 0; gap /= 2) {
// 按步长进行插入排序
for (inti = gap; i < len; i++) {
// 插入排序
for (intj = i; j >= gap; j -=gap) {
if (arr[j].compareTo(arr[j -gap]) < 0) {
String temp =arr[j];
arr[j] =arr[j - gap];
arr[j -gap] = temp;
} else {
break;
}
}
}
}
return arr;
}
快速
public String[]quick_sort(String[]arr) {
//将所需参数传递给对应方法
return quick_sort(arr, 0,arr.length - 1);
}
public String[]quick_sort(String[]arr, intstart, intend) {
//跳出递归的条件
if (start >=end) {
returnarr;
}
//将第一个值作为中间值小的排序在左,大的排序在右
String mid = arr[start];
//定义双向的游标
int low = start;
int high = end;
//控制游标向中间汇聚
while (low <high) {
//当右边的值比中间值大,游标左移
while (low <high && arr[high].compareTo(mid) >= 0) {
high -= 1;
}
//当右边的值比中间值小,将小的值移动到中间值左边
arr[low] =arr[high];
//当左边的值比中间值小,游标右移
while (low <high && arr[low].compareTo(mid) < 0) {
low += 1;
}
//当左边的值比中间值大,将大的数值移动到中间值右边
arr[high] =arr[low];
}
//游标汇聚中间点,将此时low游标处的存储中间值,此时中间值左边一定小,右边一定为大值
arr[low] = mid;
//将中间值左侧数组递归调用
quick_sort(arr, start, low - 1);
//将中间值右侧数组递归调用
quick_sort(arr, low + 1, end);
//将排序后的结果返回
return arr;
}
混合
static Listmerge_sort(Listlist) {
// 判断集合大小
if (list.size() <=1) {
returnlist;
}
// 进行二分分解直至拆解为单个集合
int num = list.size() / 2;
// 递归调用拆解为单个
List left = merge_sort(list.subList(0,num));
List right = merge_sort(list.subList(num,list.size()));
// 合并并排序
return merge_sort(left, right);
}
/**合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组*/
static Listmerge_sort(Listleft, List right) {
//初始化两个集合的索引
int l = 0;
int r = 0;
//创建一个空集合用来存储排序后的结果
List result = new ArrayList();
//判断索引如果小于两边集合就进入循环进行排序
while (l <left.size()&& r <right.size()) {
//获取对应索引的元素
String m_left = (String)left.get(l);
String m_right = (String)right.get(r);
//将取出的元素进行比较,小的添加到结果集合当中并移动索引
if (m_left.compareTo(m_right)<0) {
result.add(m_left);
l += 1;
} else {
result.add(m_right);
r += 1;
}
}
//将两个集合中的未添加的元素全部添加到结果集当中
result.addAll(left.subList(l,left.size()));
result.addAll(right.subList(r,right.size()));
return result;
}