ITPub博客

首页 > Linux操作系统 > Linux操作系统 > .net版 字符串数组桶排序算法

.net版 字符串数组桶排序算法

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-02-06 17:31:28 0 删除 编辑

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

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

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

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

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

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


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

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->string[,] finaArr = new string[strArray.Length, sortStr.Length];
这里还需要一个准备工作,就是取每个元素的首字母,如:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->private string GetFirstLetter(string str){

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

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->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;
            }
        }
    }
做到这里,排序就完成了,只需输出就可以了,如:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->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(
"
");
                j
++;
            }
        }
        
return bui.ToString();

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-545466/,如需转载,请注明出处,否则将追究法律责任。

上一篇: asp.net MVC 解释
下一篇: ADO.NET连接数据库
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5347667