上一篇博客签名算法 待签名参数按照字段名的ASCII码大小排序 Android、JS中实现中提到的排序方法实现都是利用系统的api,在这里想用一下底层算法来实现:
1.先看系统api实现
String[] data = new String[]{"key", "ba","ba", "ac", "bb","bbc","ccce","ccc"};
Arrays.sort(data);
//System.out.println("compare***" + compare("bb", "bbc"));
//System.out.println("compare***" + compare("ccce", "ccc"));
//data = bubbleSort(data);
for(String i:data){
System.out.println("array i***" + i);
}
=》
I/System.out: array i***ac
array i***ba
array i***ba
array i***bb
array i***bbc
array i***ccc
array i***ccce
array i***key
2.自己写排序算法实现
/**
* 冒泡排序
*/
public String[] bubbleSort(String[] array) {
if (array.length == 0)
return array;
for (int i = 0, l = array.length; i < l - 1; i++) {
for (int j = 0; j < l - 1 - i; j++) {
if (compare(array[j], array[j + 1]) == 1) {
String temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}
/**
* 比较2个String之间大小
*/
public int compare(String o1, String o2) {
//2者取最短
int length = Math.min(o1.length(), o2.length());
for (int i = 0; i < length; i++) {
if (o1.charAt(i) < o2.charAt(i)) {
return -1;
} else if (o1.charAt(i) > o2.charAt(i)) {
return 1;
}
}
//程序运行到这 说明前面2者比较的部分是相等的,则继续比较长度
if (o1.length() < o2.length()) {
return -1;
} else if (o1.length() > o2.length()) {
return 1;
}else{
return 0;
}
}
String[] data = new String[]{"key", "ba", "ba", "ac", "bb", "bbc", "ccce", "ccc"};
//Arrays.sort(data);
System.out.println("compare***" + compare("bb", "bbc"));
System.out.println("compare***" + compare("ccce", "ccc"));
data = bubbleSort(data);
for (String i : data) {
System.out.println("array i***" + i);
}
I/System.out: compare***-1
compare***1
array i***ac
array i***ba
array i***ba
array i***bb
array i***bbc
array i***ccc
array i***ccce
array i***key
其他排序算法可自行实现,关键点在compare方法(比较2个String之间大小).