zoukankan      html  css  js  c++  java
  • .net版 字符串数组桶排序算法

    现要将字符串数组按首字母做排序,如:

    string[] sortStr = new string[] {"Jack","John","Ja","Bob","Bay","Candy","Enk","Fuk","Amy","Day","Mum","Num","Ju","Fee" };

    于是想到了利用桶排序的方法
    首先要定义一个数组包含所有的首字母,如:

    string[] strArray = new string[] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N" };


    因为有重复的首字母存在,所以要定义一个二维数组来存放相同首字母的数组元素,其中行数就是strArray.Length,而列数就是sortStr.Length,如:

    string[,] finaArr = new string[strArray.Length, sortStr.Length];
    这里还需要一个准备工作,就是取每个元素的首字母,如:
    private string GetFirstLetter(string str){

            
    if (string.IsNullOrEmpty(str)) return "";
            
    return str.Substring(01);
    }
    好了,现在可以开始排序算法了,思路就是将数组sortStr中的每一个元素中的首字母与数组strArray进行比较,然后存入数组finaArr相应的行中,如:
    foreach (string s in sortStr) {

                InputElement(s, strArray, finaArr);
    }

    private void InputElement(string sortStrElement, string[] strArray, string[,] finaArr) {

            
    string temp = GetFirstLetter(sortStrElement);
            
    for (int i = 0; i < strArray.Length; i++) {

                
    if (temp == strArray[i]) {

                    
    if (string.IsNullOrEmpty(finaArr[i, 0]))
                        finaArr[i, 
    0= sortStrElement;
                    
    else {

                        
    int j = 0;
                        
    while (!string.IsNullOrEmpty(finaArr[i, j]))
                            j
    ++;
                        finaArr[i,j] 
    = sortStrElement;
                    }
                    
    break;
                }
            }
        }
    做到这里,排序就完成了,只需输出就可以了,如:
    StringBuilder bui = new StringBuilder();

            
    for (int i = 0; i < finaArr.GetLength(0); i++){

                
    if (string.IsNullOrEmpty(finaArr[i, 0]))
                    
    continue;
                
    int j = 0;
                
    while (!string.IsNullOrEmpty(finaArr[i, j])) {

                    bui.Append(finaArr[i, j]).Append(
    "<br>");
                    j
    ++;
                }
            }
            
    return bui.ToString();

    完成了,有什么不对的地方,请大家批评指正,谢谢

  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/lizheng114/p/1385201.html
Copyright © 2011-2022 走看看