如果我有三个以上带数据的节点,我的排序算法将不会真正对我的列表节点进行排序。我认为它改变了很多节点,并且如果成功改变就不会破坏我的时间。 我认为我的sort_Name调用了很多sort_bychar。 sort_Name验证我的数据包的名称 sort_byChar将我的两个String名称的字符比较为CharArray switch_Name_Data仅切换数据包。 算法在选择排序中是非常重要的。
void sort_Name() {
Node node_last = getLast();
Node node_i;
Node node_j;
String title_i;
String title_j;
char[] c_node_i;
char[] c_node_j;
for (int i = 0; i <= node_last.data.getId(); i++) {
int j = 0;
while (j < i) {
node_i = getSpecNode(i);
node_j = getSpecNode(j);
title_i = node_i.data.getTitle();
title_j = node_j.data.getTitle();
if (node_i.data.getName_last().equals(node_j.data.getName_last())) {
if (node_i.data.getName_first().equals(node_j.data.getName_first())) {
if (node_i.data.getTitle().equals("Dr.")) {
switch_Name_Data(node_i, node_j);
break;
}
}
if (node_i.data.getName_first() != node_j.data.getName_first()) {
c_node_i = node_i.data.getName_first().toCharArray();
c_node_j = node_j.data.getName_first().toCharArray();
sort_byChar(node_j, node_i, c_node_i, c_node_j);
break;
}
} else {
c_node_i = node_i.data.getName_last().toCharArray();
c_node_j = node_j.data.getName_last().toCharArray();
sort_byChar(node_j, node_i, c_node_i, c_node_j);
break;
}
j++;
}
}
}
private void change_id(Node n_i, Node n_j) {
int tmp_id = n_j.data.getId();
n_j.data.setId(n_i.data.getId());
n_i.data.setId(tmp_id);
}
private void sort_byChar(Node iv_node_i, Node iv_node_j, char[] iv_name_i, char[] iv_name_j) {
int k = 0;
char[] c_node_i = iv_name_i;
char[] c_node_j = iv_name_j;
while (k < c_node_i.length) {
try {
if (c_node_i[k] == c_node_j[k]) {
int l = k + 1;
while (c_node_i[l] != c_node_j[l]) {
if (c_node_i[l] < c_node_j[l]) {
switch_Name_Data(iv_node_i, iv_node_j);
break;
}
}
} else {
if (c_node_i[k] < c_node_j[k]) {
switch_Name_Data(iv_node_i, iv_node_j);
break;
}else{
break;
}
}
} catch (IndexOutOfBoundsException e) {
break;
}
k++;
}
}
private void switch_Name_Data(Node n_i, Node n_j) {
Data tmp_i = n_i.data;
n_i.data = n_j.data;
n_j.data = tmp_i;
change_id(n_i, n_j);
}