基礎算法----快速排序

快速排序算法

快速排序使用分治法策略把一個串行分爲兩個子串行(兩個串行的分割點就是基準點,兩部分是大於基準點部分和小於基準點部分)。git

  1. 數列中選擇一個元素做爲基準點,常從第一個元素開始;
  2. 序列中小於基準點的元素放到前面,大於基準點的元素放到基準點後面,這個過程稱爲分區操做;
  3. 遞歸的把兩個子序列(大於基準點部分,小於基準點部分)進行遞歸操做;
  4. 退出條件,left = right;

代碼示例

static int[] arr = { 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };

#region 快速排序
static void quickSort(int left,int righ)
{
    if (left > righ) {
         return;
}

 int k = arr[left];
 int i = left;
 int j = righ;

while (i!=j)
{
    while (k <= arr[j] && i < j)
     {
         j--;
     }
     while (k >= arr[i] && i<j)
      {
           i++;
       }
    if(i<j)
    {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
     }
}

if (i == j)
{
      arr[left] = arr[i];
      arr[i] = k;
}

quickSort(left,i-1);
quickSort(i+1,righ);
}
#endregion

結果

快速排序

源碼

http://git.oschina.net/aspnet/Suan-Fa算法

相關文章
相關標籤/搜索