程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 自底向上排序法-c#

自底向上排序法-c#

編輯:C#入門知識

自底向上排序法,可以說比冒泡排序法快了很多。基本思想就是:   首先2個一組,一組的,排好序,   然後4個一組一組的排好序   .......8個........   直到全部排完       這裡就是存在一個問題,中間過渡的時候,需要一個臨時數組去保存數據,其實就是每一個片段都是插入排序法的變體。   代碼如下:   [csharp]   private int[] sortedData;           public int[] Sort(int[] data)           {               sortedData = new int[data.Length];               int t = 1;               while (t < data.Length)               {                   int dt = t * 2;                   int i = 0;                   while (i + dt <= data.Length)                   {                       merge(data, i, i + t, i + dt - 1);                       i = i + dt;                   }                   if (i + t < data.Length)                   {                       merge(data, i, i + t, data.Length -1);                   }                   t = t * 2;               }               return sortedData;           }                     private void merge(int[] data, int index1, int index2, int end)           {               int j = index1;               int k = index2;               int i = index1;               while (j < index2 && k <= end)               {                   if (data[j] < data[k])                   {                       sortedData[i] = data[j];                       j++;                       i++;                   }                   else                   {                       sortedData[i] = data[k];                       k++;                       i++;                   }               }               if (j == index2)               {                   while (k <= end)                   {                       sortedData[i] = data[k];                       k++;                       i++;                   }               }               else               {                   while (j < index2)                   {                       sortedData[i] = data[j];                       j++;                       i++;                   }               }               i = index1;               for (; i <= end; i++)               {                   data[i] = sortedData[i];               }           }      

  1. 上一頁:
  2. 下一頁: