C#实现所有经典排序算法

来源:互联网 发布:淘宝充气娃娃视频 编辑:程序博客网 时间:2024/05/05 05:11

//选择排序 class SelectionSorter {   private int min;   public void Sort(int[] arr)   {     for (int i = 0; i < arr.Length - 1; ++i)     {       min = i;       for (int j = i + 1; j < arr.Length; ++j)       {         if (arr[j] < arr[min])           min = j;       }       int t = arr[min];       arr[min] = arr[i];       arr[i] = t;     }   }   static void Main(string[] args)   {     int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };     SelectionSorter s = new SelectionSorter();     s.Sort(array);     foreach (int m in array)       Console.WriteLine("{0}", m);   } } //冒泡排序 class EbullitionSorter {   public void Sort(int[] arr)   {     int i, j, temp;     bool done = false;     j = 1;     while ((j < arr.Length) && (!done))//判断长度     {       done = true;       for (i = 0; i < arr.Length - j; i++)       {         if (arr[i] > arr[i + 1])         {           done = false;           temp = arr[i];           arr[i] = arr[i + 1];//交换数据           arr[i + 1] = temp;         }       }       j++;     }   }    static void Main(string[] args)   {     int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };     EbullitionSorter e = new EbullitionSorter ();     e.Sort(array);     foreach (int m in array)       Console.WriteLine("{0}", m);    } } //快速排序 class QuickSorter {   private void swap(ref int l, ref int r)   {     int temp;     temp = l;     l = r;     r = temp;   }   public 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);   }     static void Main(string[] args)   {     int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };     QuickSorter q = new QuickSorter();     q.Sort(iArrary, 0, 13);     for (int m = 0; m <= 13; m++)       Console.WriteLine("{0}", iArrary[m]);   } } //插入排序 public class InsertionSorter {   public void Sort(int[] arr)   {     for (int i = 1; i < arr.Length; i++)     {       int t = arr[i];       int j = i;       while ((j > 0) && (arr[j - 1] > t))       {         arr[j] = arr[j - 1];//交换顺序         --j;       }       arr[j] = t;     }   }   static void Main(string[] args)   {     int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };     InsertionSorter i = new InsertionSorter();     i.Sort(array);     foreach (int m in array)       Console.WriteLine("{0}", m);    } } //希尔排序 public class ShellSorter {   public void Sort(int[] arr)   {     int inc;     for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;     for (; inc > 0; inc /= 3)     {       for (int i = inc + 1; i <= arr.Length; i += inc)       {         int t = arr[i - 1];         int j = i;         while ((j > inc) && (arr[j - inc - 1] > t))         {           arr[j - 1] = arr[j - inc - 1];//交换数据           j -= inc;         }         arr[j - 1] = t;       }     }   }    static void Main(string[] args)   {     int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };     ShellSorter s = new ShellSorter();     s.Sort(array);     foreach (int m in array)       Console.WriteLine("{0}", m);     } } 

原创粉丝点击