排序问题

来源:互联网 发布:网络协议的功能 编辑:程序博客网 时间:2024/05/17 02:54
using System;
namespace BasicSorter
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   int[] iArrary=new int[]{95,2,70,13,6,10,55,99,87,12,34,75,4,33,75,1};
   foreach(int i in iArrary)
    Console.Write("{0}  ",i);
   Console.WriteLine();
   //冒泡排序
   //BubbleSorter bs=new BubbleSorter();
   //bs.Sort(iArrary);
   //
   //选择排序
   //SelectSorter ss=new SelectionSorter();
   //ss.Sort(iArrary);
   //
   //插入排序
   //InsertSorter is1=new InsertSorter();
   //is1.Sort(iArrary);
   //
   //希尔排序
   //ShellSorter ss1=new ShellSorter();
   //ss1.Sort(iArrary);
   //
   //快速排序
   RapidSort rs=new RapidSort();
   rs.Sort(iArrary,0,iArrary.Length-1);
   foreach(int i in iArrary)
    Console.Write("{0}  ",i);
   Console.WriteLine();
  }
 }
 //
 //冒泡排序
 //
 public class BubbleSorter
 {
  public void Sort(int [] list)
  {
   int i,j,temp;
   /*
    ------------------------------
   for(j=0;j<list.Length;j++)
   {
    for(i=(list.Length-1);i>j;i--)
    {
     if(list[i-1]>list[i])
     {
      temp=list[i-1];
      list[i-1]=list[i];
      list[i]=temp;
     }
    }
   }
   -----------------------------
   */
   bool flag=false;
   j=1;
   while((j<list.Length)&&(!flag))
   {
    flag=true;
    for(i=0;i<list.Length-j;i++)
    {
     if(list[i]>list[i+1])
     {
      flag=false;
      temp=list[i];
      list[i]=list[i+1];
      list[i+1]=temp;
     }
    }
    j++;
   }
  }
 }
  //
 //选择排序
 //
 public class SelectSorter
 {
  private int min,temp;
  public void Sort(int [] list)
  {
   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;
    }
    temp=list[min];
    list[min]=list[i];
    list[i]=temp;
   }
  }
 }
   //
 //插入排序
 //
 public class InsertSorter
 {
  public void Sort(int [] list)
  {
   for(int i=1;i<list.Length;i++)
   {
    int temp=list[i];
    int j=i;
    while((j>0)&&(list[j-1]>temp))
    {
     list[j]=list[j-1];
     --j;
    }
    list[j]=temp;
   }
  }
 }
  //
 //希尔排序
 //对直接插入排序作了改进,将组分段,进行插入排序
 //又称“缩小增量排序
 //
 public class ShellSorter
 {
  public void Sort(int [] list)
  {
   int i,j,d,temp;
   d=(list.Length)/2;
   while(d>=1)
   {
    for(i=d;i<list.Length;i++)
    {
     temp=list[i];
     j=i-d;
     while((j>=0) && (temp<list[j]))
     {
      list[j+d]=list[j];
      j=j-d;
     }
     list[j+d]=temp;
    }
    d=d/2;
   }
  }
 }
 //
 //快速排序
 //
 public class RapidSort
 {
  public void Sort(int [] list,int min,int max)
  {
   int i,j,temp;
   if(min<max)
   {
    i=min;
    j=max;
    temp=list[i];
    while(i!=j)
    {
     while((temp<list[j]) && (i<j)) //从右端向内进行扫描
      j--;
     if(i<j)
     {
      list[i]=list[j];
      i++;
     }
     while((temp>=list[i]) && (i<j))  //从左端向内进行扫描
      i++;
     if(i<j)
     {
      list[j]=list[i];
      j--;
     }
     list[i]=temp;
     if(j>0)
      Sort(list,min,i-1);  //处理左侧无序子区
     if(i<(list.Length-1))
      Sort(list,i+1,max);  //处理右侧无序子区
    }
   }
  }
 }
}