<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    備注學院

    LuLu

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      5 隨筆 :: 50 文章 :: 16 評論 :: 0 Trackbacks
    CSDN - 文檔中心 - .NET 閱讀:1338   評論: 0    參與評論
    標題   【算法】C#快速排序類     選擇自 lovewangshu 的 Blog
    關鍵字   【算法】C#快速排序類
    出處  

    快速排序的基本思想是基于分治策略的。對于輸入的子序列ap..ar,如果規模足夠小則直接進行排序,否則分三步處理:

    分解(Divide):將輸入的序列ap..ar劃分成兩個非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。 
    遞歸求解(Conquer):通過遞歸對p..aq和aq+1..ar進行排序。 
    合并(Merge):由于對分解出的兩個子序列的排序是就地進行的,所以在ap..aq和aq+1..ar都排好序后不需要執行任何計算ap..ar就已排好序。 
    這個解決流程是符合分治法的基本步驟的。因此,快速排序法是分治法的經典應用實例之一。

    using System;

    namespace VcQuickSort
    {
     /// <summary>
     /// ClassQuickSort 快速排序。
     /// 范維肖
     /// </summary>

     public class QuickSort
     {
      public QuickSort()
      {
      }

      private void Swap(ref int i,ref int j)
      //swap two integer
      {
       int t;
       t=i;
       i=j;
       j=t;
      }
      
      public void Sort(int [] list,int low,int high)
      {
       if(high<=low)
       {
        //only one element in array list
        //so it do not need sort
        return;
       }
       else if (high==low+1)
       {
        //means two elements in array list
        //so we just compare them

        if(list[low]>list[high])
        {
         //exchange them
         Swap(ref list[low],ref list[high]);
         return;
        }
       }
       //more than 3 elements in the arrary list
       //begin QuickSort

       myQuickSort(list,low,high);
      }

      public void myQuickSort(int [] list,int low,int high)
      {
       if(low<high)
       {
        int pivot=Partition(list,low,high);
        myQuickSort(list,low,pivot-1);
        myQuickSort(list,pivot+1,high);
       }
      }

      private int Partition(int [] list,int low,int high)
      {
       //get the pivot of the arrary list
       int pivot;
       pivot=list[low];
       while(low<high)
       {
        while(low<high && list[high]>=pivot)
        {
         high--;
        }
        if(low!=high)
        {
         Swap(ref list[low],ref list[high]);
         low++;
        }
        while(low<high && list[low]<=pivot)
        {
         low++;
        }
        if(low!=high)
        {
         Swap(ref list[low],ref list[high]); 
         high--;
        }
       }
       return low;
      }

     }
    }


    posted on 2008-08-07 09:14 smildlzj 閱讀(187) 評論(0)  編輯  收藏 所屬分類: C#
    主站蜘蛛池模板: 亚洲精品视频观看| 亚洲国产日韩精品| 国产在线jyzzjyzz免费麻豆| 亚洲国产品综合人成综合网站| 成人免费午夜视频| a级毛片免费观看在线| 亚洲最大福利视频网站| 日韩av无码成人无码免费| 成年大片免费视频播放一级 | 亚洲爆乳无码专区| 99热在线精品免费全部my| 无码免费又爽又高潮喷水的视频| 亚洲gv白嫩小受在线观看| 成人免费无码视频在线网站| 一级免费黄色大片| va天堂va亚洲va影视中文字幕 | AV免费网址在线观看| 一级免费黄色大片| 亚洲一区在线视频| 国产亚洲精品无码专区| 一二三四免费观看在线电影| 久久久受www免费人成| 亚洲日韩精品无码AV海量| 好看的电影网站亚洲一区| 永久黄网站色视频免费观看| 叮咚影视在线观看免费完整版| 亚洲精品色播一区二区| 久热综合在线亚洲精品| 亚洲av区一区二区三| 免费不卡视频一卡二卡| 国产色无码精品视频免费| 久久水蜜桃亚洲AV无码精品| 亚洲激情黄色小说| 亚洲欧洲日产国码无码网站| 成全视频免费高清 | h片在线免费观看| 男女一边桶一边摸一边脱视频免费 | v片免费在线观看| 亚洲精品日韩一区二区小说| 亚洲第一永久在线观看| 国产亚洲一区二区手机在线观看|