.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( 0 1 );
}
好了,现在可以开始排序算法了,思路就是将数组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();

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

 

转载于:https://www.cnblogs.com/lizheng114/archive/2009/02/06/1385201.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值