飞诺会员签到大派送 ★新手必读★ ◆◇飞诺社区版主正在招募中! 论坛吐血大奖励 原创征文
◆『N币兑换图书活动』◆ 著名杀毒软件之七种兵器-详评 抵制践踏GPL的QQ影音 金山毒霸被诉歧视消费者
青岛网偷第一案宣判10年 几款凶猛的病毒! JAVA与.NET对垒,我们到底该选谁? 以下哪种木马最邪恶?

c#各种排序算法

[ 1597 查看 / 2 回复 ]


public class Sorter
       {
         /// <summary>
         /// 冒泡排序法1
         /// </summary>
         /// <param name="list"></param>
          public static void BubbleSort(int[] list)
          {
              for (int i = 0; i < list.Length; i++)
              {
                  for (int j = i; j < list.Length; j++)
                  {
                      if (list < list[j])
                      {
                         int temp = list;
                         list = list[j];
                         list[j] = temp;
                     }
                 }
             }
         }


         /// <summary>
         /// 插入排序法
         /// </summary>
         /// <param name="list"></param>
         public static void InsertionSort(int[] list)
         {
             for (int i = 1; i < list.Length; i++)
              {
                 int t = list;
                 int j = i;
                 while ((j > 0) && (list[j - 1] > t))
                 {
                     list[j] = list[j - 1];
                     --j;
                 }
                 list[j] = t;
             }
         }


         //// <summary>
         /// 选择排序法
         /// </summary>
         /// <param name="list"></param>
         public static void SelectionSort(int[] list)
         {
             int min;
             for (int i = 0; i < list.Length - 1; i++)
             {
                 min = i;
                 for (int j = i + 1; j < list.Length; j++)
                 {
                     if (list[j] < list[min])
                         min = j;
                 }
                 int t = list[min];
                 list[min] = list;
                 list = t;
             }
         }


        //// <summary>
        /// 希尔排序法
        /// </summary>
        /// <param name="list"></param>
        public static void ShellSort(int[] list)
        {
             int inc;
             for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
             for (; inc > 0; inc /= 3)
             {
                 for (int i = inc + 1; i <= list.Length; i += inc)
                 {
                     int t = list[i - 1];
                     int j = i;
                     while ((j > inc) && (list[j - inc - 1] > t))
                     {
                         list[j - 1] = list[j - inc - 1];
                         j -= inc;
                     }
                     list[j - 1] = t;
                 }
             }
         }


         private static void Swap(ref int l, ref int r)
         {
             int s;
             s = l;
             l = r;
             r = s;
         }


         /// 快速排序法
         /// </summary>
         /// <param name="list"></param>
         /// <param name="low"></param>
         /// <param name="high"></param>
         public static void Sort(int[] list, int low, int high)
         {
             int pivot;
             int l, r;
             int mid;
             if (high <= low)
                 return;
             else if (high == low + 1)
             {
                 if (list[low] > list[high])
                     Swap(ref list[low], ref list[high]);
                 return;
             }
             mid = (low + high) >> 1;
             pivot = list[mid];
             Swap(ref list[low], ref list[mid]);
             l = low + 1;
             r = high;
             do
             {
                 while (l <= r && list[l] < pivot)
                     l++;
                 while (list[r] >= pivot)
                     r--;
                 if (l < r)
                     Swap(ref list[l], ref list[r]);
             } while (l < r);
             list[low] = list[r];
             list[r] = pivot;
             if (low + 1 < r)
                 Sort(list, low, r - 1);
             if (r + 1 < high)
                 Sort(list, r + 1, high);
         }


 


--------------------------------------------------------------------------------



C#中排序用自带的Array.Sort()即可实现,上面只是一些算法的实现;


Array.Sort还可自定义排序所使用的比较方法;


如:
A1,A2,A10  
用Array.Sort(arr)排序后变为:
A1,A10,A2  
-------------
如果你要排序后的顺序为:
A1,A2,A10  
则要自定义一个Comparer,如:
 public   class   CustomComparer:System.Collections.IComparer  
  {  
  public   int   Compare(object   x,   object   y){  
  string   s1   =   (string)x;  
  string   s2   =   (string)y;  
  if   (s1.Length   >   s2.Length)   return   1;  
  if   (s1.Length   <   s2.Length)   return   -1;  
  for   (int   i   =   0;   i   <   s1.Length;   i++)   {  
  if   (s1   >   s2)   return   1;  
  if   (s1   <   s2)   return   -1;  
  }  
  return   0;  
  }  
  }  


然后这样调用:  
  string[]   str   =   new   string[]{"A1","A2","A10"};  
  Array.Sort(str,   new   CustomComparer());  
  for   (int   i   =   0;   i   <   str.Length;   i++)  
  Console.WriteLine(str);
就可以输出:A1,A2,A10 

本主题由 管理员 diybl 于 2010-3-30 16:03:20 执行 移动主题 操作
TOP

又见冒泡

TOP

好东西

TOP
出现这样的错误提示:在建立与服务器的连接时出错。在
c# 一次性插入SQL SERVER 的表700万行记录!!慢得要
C# 专业项目实例开发
分享《代码大全(第二版)》[中文PDF
2010微软大会的折扣门票和售票时间有谁知道?麻烦告之
C#Textbox只能输入数字和小数点并且小数点不能在第一
ASP.NET中怎么获取TEXTBOX的值(C#)
unable to find a version of the runtime to run thi
c#各种排序算法
C#开发的开源 OA办公系统 coffice UDS 飞思 的问题 -
colse