Visual C# 诠释常用排序算法

豆豆网   技术应用频道   2006年11月18日  【字号: 收藏本文

本文详细介绍Visual C# 诠释常用排序算法

/// <summary>
/// 小根堆排序
/// </summary>
/// <param name="dblArray"></param>
/// <param name="StartIndex"></param>
/// <returns></returns>
private static void HeapSort(ref double[] dblArray )
{
 for(int i = dblArray.Length -1 ; i >= 0; i--)
 {
  if(2*i+1<dblArray.Length)
  {
   int MinChildrenIndex = 2*i+1 ;
   //比较左子树和右子树,记录最小值的Index
   if(2*i+2 < dblArray.Length )
   {
    if(dblArray[2*i+1]>dblArray[2*i+2])
     MinChildrenIndex = 2*i+2;
   }
   if(dblArray[i] > dblArray[MinChildrenIndex])
   {
    ExchageValue(ref dblArray[i],ref dblArray[MinChildrenIndex]);
    NodeSort(ref dblArray ,MinChildrenIndex);
   }
  }
 }
}
/// <summary>
/// 节点排序
/// </summary>
/// <param name="dblArray"></param>
/// <param name="StartIndex"></param>
private static void NodeSort(ref double[] dblArray,int StartIndex)
{
 while(2*StartIndex+1 < dblArray.Length)
 {
  int MinChildrenIndex = 2*StartIndex+1 ;
  if(2*StartIndex+2 < dblArray.Length )
  {
   if(dblArray[2*StartIndex+1]>dblArray[2*StartIndex+2])
   {
    MinChildrenIndex = 2*StartIndex+2;
   }
  }
  if(dblArray[StartIndex] > dblArray[MinChildrenIndex])
  {
   ExchageValue(ref dblArray[StartIndex],ref dblArray[MinChildrenIndex]);
   StartIndex = MinChildrenIndex ;
  }
 }
}
/// <summary>
/// 交换值
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
private static void ExchageValue(ref double A , ref double B)
{
 double Temp = A ;
 A = B ;
 B = Temp ;
}

  总结:

  人常说算法是程序的灵魂,在作项目的过程中时常注意且不可灵魂出窍。时常去回顾一下以前的数据重要性就如同基督徒每周要做礼拜一样。不能因为有了C# 和Java这种平台之后,就忽略了基础的重要性。

  我用C#的控制台程序 把这几个算法实现了一下,代码在附件中,如有写的不好的地方,敬请指正。

来源:天极开发    作者:李渭宁    责编:豆豆技术应用

正在加载评论...