按姓氏排序链表

时间:2016-04-20 10:43:36

标签: java algorithm sorting linked-list selection-sort

如果我有三个以上带数据的节点,我的排序算法将不会真正对我的列表节点进行排序。我认为它改变了很多节点,并且如果成功改变就不会破坏我的时间。 我认为我的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);
}

0 个答案:

没有答案