• <video id="abmqw"><input id="abmqw"></input></video>
  • <strong id="abmqw"><noscript id="abmqw"></noscript></strong>
  • <i id="abmqw"><sub id="abmqw"></sub></i>
      <video id="abmqw"></video>
      <output id="abmqw"></output>

    1. <video id="abmqw"><ins id="abmqw"><table id="abmqw"></table></ins></video>

      <wbr id="abmqw"><input id="abmqw"></input></wbr>
    2. <thead id="abmqw"><span id="abmqw"></span></thead>
    3. 排序算法總結
      查看(2120) 回復(11)
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      樓主
      一、插入排序(Insertion Sort)
      1. 基本思想:
      每次將一個待排序的數據元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序;直到待排序數據元素全部插入完為止。
      2. 排序過程: 
      【示例】:
      [初始關鍵字] [49] 38 65 97 76 13 27 49
          J=2(38) [38 49] 65 97 76 13 27 49
          J=3(65) [38 49 65] 97 76 13 27 49
          J=4(97) [38 49 65 97] 76 13 27 49
          J=5(76) [38 49 65 76 97] 13 27 49
          J=6(13) [13 38 49 65 76 97] 27 49
          J=7(27) [13 27 38 49 65 76 97] 49
          J=8(49) [13 27 38 49 49 65 76 97]

      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      22樓
      Procedure Parttion(Var R : FileType; L, H : Integer; Var I : Integer);
      //對無序區R[1,H]做劃分,I給以出本次劃分后已被定位的基準元素的位置 //
      Begin
        I := 1; J := H; X := R ;//初始化,X為基準//
        Repeat
          While (R[J] >= X) And (I < J) Do
            begin
             J := J - 1 //從右向左掃描,查找第1個小于 X的元素//
             If I < J Then //已找到R[J] 〈X//
               begin
                R := R[J]; //相當于交換R和R[J]//
                I := I + 1
               end;
             While (R <= X) And (I < J) Do
                I := I + 1 //從左向右掃描,查找第1個大于 X的元素///
            end;
           If I < J Then //已找到R > X //
             begin         R[J] := R; //相當于交換R和R[J]//
              J := J - 1
             end
        Until I = J;
        R := X //基準X已被最終定位//
      End; //Parttion //
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      23樓
      Procedure QuickSort(Var R :FileType; S,T: Integer); //對R[S..T]快速排序//
      Begin
        If S < T Then //當R[S..T]為空或只有一個元素是無需排序//
          begin
            Partion(R, S, T, I); //對R[S..T]做劃分//
            QuickSort(R, S, I-1);//遞歸處理左區間R[S,I-1]//
            QuickSort(R, I+1,T);//遞歸處理右區間R[I+1..T] //
          end;
      End; //QuickSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      24樓
      Procedure QuickSort(Var R :FileType; S,T: Integer); //對R[S..T]快速排序//
      Begin
        If S < T Then //當R[S..T]為空或只有一個元素是無需排序//
          begin
            Partion(R, S, T, I); //對R[S..T]做劃分//
            QuickSort(R, S, I-1);//遞歸處理左區間R[S,I-1]//
            QuickSort(R, I+1,T);//遞歸處理右區間R[I+1..T] //
          end;
      End; //QuickSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      25樓
      Procedure QuickSort(Var R :FileType; S,T: Integer); //對R[S..T]快速排序//
      Begin
        If S < T Then //當R[S..T]為空或只有一個元素是無需排序//
          begin
            Partion(R, S, T, I); //對R[S..T]做劃分//
            QuickSort(R, S, I-1);//遞歸處理左區間R[S,I-1]//
            QuickSort(R, I+1,T);//遞歸處理右區間R[I+1..T] //
          end;
      End; //QuickSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      26樓
      五、堆排序(Heap Sort)
      1. 基本思想:
      堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
      2. 堆的定義: N個元素的序列K1,K2,K3,...,Kn.稱為堆,當且僅當該序列滿足特性:
             Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])


      堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉子結點的關鍵字均大于等于其孩子結點的關鍵字。例如序列10,15,56,25,30,70就是一個堆,它對應的完全二叉樹如上圖所示。這種堆中根結點(稱為堆頂)的關鍵字最小,我們把它稱為小根堆。反之,若完全二叉樹中任一非葉子結點的關鍵字均大于等于其孩子的關鍵字,則稱之為大根堆。
      3. 排序過程:
      堆排序正是利用小根堆(或大根堆)來選取當前無序區中關鍵字小(或最大)的記錄實現排序的。我們不妨利用大根堆來排序。每一趟排序的基本操作是:將當前無序區調整為一個大根堆,選取關鍵字最大的堆頂記錄,將它和無序區中的最后一個記錄交換。這樣,正好和直接選擇排序相反,有序區是在原記錄區的尾部形成并逐步向前擴大到整個記錄區。
      【示例】:對關鍵字序列42,13,91,23,24,16,05,88建堆
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      27樓
      五、堆排序(Heap Sort)
      1. 基本思想:
      堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
      2. 堆的定義: N個元素的序列K1,K2,K3,...,Kn.稱為堆,當且僅當該序列滿足特性:
             Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])


      堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉子結點的關鍵字均大于等于其孩子結點的關鍵字。例如序列10,15,56,25,30,70就是一個堆,它對應的完全二叉樹如上圖所示。這種堆中根結點(稱為堆頂)的關鍵字最小,我們把它稱為小根堆。反之,若完全二叉樹中任一非葉子結點的關鍵字均大于等于其孩子的關鍵字,則稱之為大根堆。
      3. 排序過程:
      堆排序正是利用小根堆(或大根堆)來選取當前無序區中關鍵字小(或最大)的記錄實現排序的。我們不妨利用大根堆來排序。每一趟排序的基本操作是:將當前無序區調整為一個大根堆,選取關鍵字最大的堆頂記錄,將它和無序區中的最后一個記錄交換。這樣,正好和直接選擇排序相反,有序區是在原記錄區的尾部形成并逐步向前擴大到整個記錄區。
      【示例】:對關鍵字序列42,13,91,23,24,16,05,88建堆
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      28樓
      五、堆排序(Heap Sort)
      1. 基本思想:
      堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
      2. 堆的定義: N個元素的序列K1,K2,K3,...,Kn.稱為堆,當且僅當該序列滿足特性:
             Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])


      堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉子結點的關鍵字均大于等于其孩子結點的關鍵字。例如序列10,15,56,25,30,70就是一個堆,它對應的完全二叉樹如上圖所示。這種堆中根結點(稱為堆頂)的關鍵字最小,我們把它稱為小根堆。反之,若完全二叉樹中任一非葉子結點的關鍵字均大于等于其孩子的關鍵字,則稱之為大根堆。
      3. 排序過程:
      堆排序正是利用小根堆(或大根堆)來選取當前無序區中關鍵字小(或最大)的記錄實現排序的。我們不妨利用大根堆來排序。每一趟排序的基本操作是:將當前無序區調整為一個大根堆,選取關鍵字最大的堆頂記錄,將它和無序區中的最后一個記錄交換。這樣,正好和直接選擇排序相反,有序區是在原記錄區的尾部形成并逐步向前擴大到整個記錄區。
      【示例】:對關鍵字序列42,13,91,23,24,16,05,88建堆
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      29樓
      Procedure Sift(Var R :FileType; I, M : Integer);
      //在數組R[I..M]中調用R,使得以它為完全二叉樹構成堆。事先已知其左、右子樹(2I+1 <=M時)均是堆//
      Begin
        X := R; J := 2*I; //若J <=M, R[J]是R的左孩子//
        While J <= M Do //若當前被調整結點R有左孩子R[J]//
         begin
          If (J < M) And R[J].Key < R[J+1].Key Then
            J := J + 1 //令J指向關鍵字較大的右孩子//
              //J指向R的左、右孩子中關鍵字較大者//
          If X.Key < R[J].Key Then //孩子結點關鍵字較大//
            begin
              R := R[J]; //將R[J]換到雙親位置上//
              I := J ; J := 2*I //繼續以R[J]為當前被調整結點往下層調整//
            end;
           Else
            Exit//調整完畢,退出循環//
         end
        R := X;//將最初被調整的結點放入正確位置//
      End;//Sift//

      Procedure HeapSort(Var R : FileType); //對R[1..N]進行堆排序//
       Begin
        For I := N Div Downto 1 Do //建立初始堆//
         Sift(R, I , N)
        For I := N Downto 2 do //進行N-1趟排序//
         begin
          T := R[1]; R[1] := R; R := T;//將當前堆頂記錄和堆中最后一個記錄交換//
          Sift(R, 1, I-1) //將R[1..I-1]重成堆//
         end
      End; //HeapSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      30樓
      Procedure Sift(Var R :FileType; I, M : Integer);
      //在數組R[I..M]中調用R,使得以它為完全二叉樹構成堆。事先已知其左、右子樹(2I+1 <=M時)均是堆//
      Begin
        X := R; J := 2*I; //若J <=M, R[J]是R的左孩子//
        While J <= M Do //若當前被調整結點R有左孩子R[J]//
         begin
          If (J < M) And R[J].Key < R[J+1].Key Then
            J := J + 1 //令J指向關鍵字較大的右孩子//
              //J指向R的左、右孩子中關鍵字較大者//
          If X.Key < R[J].Key Then //孩子結點關鍵字較大//
            begin
              R := R[J]; //將R[J]換到雙親位置上//
              I := J ; J := 2*I //繼續以R[J]為當前被調整結點往下層調整//
            end;
           Else
            Exit//調整完畢,退出循環//
         end
        R := X;//將最初被調整的結點放入正確位置//
      End;//Sift//

      Procedure HeapSort(Var R : FileType); //對R[1..N]進行堆排序//
       Begin
        For I := N Div Downto 1 Do //建立初始堆//
         Sift(R, I , N)
        For I := N Downto 2 do //進行N-1趟排序//
         begin
          T := R[1]; R[1] := R; R := T;//將當前堆頂記錄和堆中最后一個記錄交換//
          Sift(R, 1, I-1) //將R[1..I-1]重成堆//
         end
      End; //HeapSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      31樓
      Procedure Sift(Var R :FileType; I, M : Integer);
      //在數組R[I..M]中調用R,使得以它為完全二叉樹構成堆。事先已知其左、右子樹(2I+1 <=M時)均是堆//
      Begin
        X := R; J := 2*I; //若J <=M, R[J]是R的左孩子//
        While J <= M Do //若當前被調整結點R有左孩子R[J]//
         begin
          If (J < M) And R[J].Key < R[J+1].Key Then
            J := J + 1 //令J指向關鍵字較大的右孩子//
              //J指向R的左、右孩子中關鍵字較大者//
          If X.Key < R[J].Key Then //孩子結點關鍵字較大//
            begin
              R := R[J]; //將R[J]換到雙親位置上//
              I := J ; J := 2*I //繼續以R[J]為當前被調整結點往下層調整//
            end;
           Else
            Exit//調整完畢,退出循環//
         end
        R := X;//將最初被調整的結點放入正確位置//
      End;//Sift//

      Procedure HeapSort(Var R : FileType); //對R[1..N]進行堆排序//
       Begin
        For I := N Div Downto 1 Do //建立初始堆//
         Sift(R, I , N)
        For I := N Downto 2 do //進行N-1趟排序//
         begin
          T := R[1]; R[1] := R; R := T;//將當前堆頂記錄和堆中最后一個記錄交換//
          Sift(R, 1, I-1) //將R[1..I-1]重成堆//
         end
      End; //HeapSort//
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      32樓
      六、幾種排序算法的比較和選擇
      1. 選取排序方法需要考慮的因素:
      (1) 待排序的元素數目n;
      (2) 元素本身信息量的大小;
      (3) 關鍵字的結構及其分布情況;
      (4) 語言工具的條件,輔助空間的大小等。
      2. 小結:
      (1) 若n較小(n <= 50),則可以采用直接插入排序或直接選擇排序。由于直接插入排序所需的記錄移動操作較直接選擇排序多,因而當記錄本身信息量較大時,用直接選擇排序較好。
      (2) 若文件的初始狀態已按關鍵字基本有序,則選用直接插入或冒泡排序為宜。
      (3) 若n較大,則應采用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序。
      快速排序是目前基于比較的內部排序法中被認為是最好的方法。
      (4) 在基于比較排序方法中,每次比較兩個關鍵字的大小之后,僅僅出現兩種可能的轉移,因此可以用一棵二叉樹來描述比較判定過程,由此可以證明:當文件的n個關鍵字隨機分布時,任何借助于"比較"的排序算法,至少需要O(nlog2n)的時間。

      這句話很重要 它告訴我們自己寫的算法 是有改進到最優 當然沒有必要一直追求最優
      (5) 當記錄本身信息量較大時,為避免耗費大量時間移動記錄,可以用鏈表作為存儲結構
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      33樓
      六、幾種排序算法的比較和選擇
      1. 選取排序方法需要考慮的因素:
      (1) 待排序的元素數目n;
      (2) 元素本身信息量的大小;
      (3) 關鍵字的結構及其分布情況;
      (4) 語言工具的條件,輔助空間的大小等。
      2. 小結:
      (1) 若n較小(n <= 50),則可以采用直接插入排序或直接選擇排序。由于直接插入排序所需的記錄移動操作較直接選擇排序多,因而當記錄本身信息量較大時,用直接選擇排序較好。
      (2) 若文件的初始狀態已按關鍵字基本有序,則選用直接插入或冒泡排序為宜。
      (3) 若n較大,則應采用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序。
      快速排序是目前基于比較的內部排序法中被認為是最好的方法。
      (4) 在基于比較排序方法中,每次比較兩個關鍵字的大小之后,僅僅出現兩種可能的轉移,因此可以用一棵二叉樹來描述比較判定過程,由此可以證明:當文件的n個關鍵字隨機分布時,任何借助于"比較"的排序算法,至少需要O(nlog2n)的時間。

      這句話很重要 它告訴我們自己寫的算法 是有改進到最優 當然沒有必要一直追求最優
      (5) 當記錄本身信息量較大時,為避免耗費大量時間移動記錄,可以用鏈表作為存儲結構
      分享到:
      lyh2006
      • 積分:1982
      • 注冊于:
      發表于
      34樓
      六、幾種排序算法的比較和選擇
      1. 選取排序方法需要考慮的因素:
      (1) 待排序的元素數目n;
      (2) 元素本身信息量的大小;
      (3) 關鍵字的結構及其分布情況;
      (4) 語言工具的條件,輔助空間的大小等。
      2. 小結:
      (1) 若n較小(n <= 50),則可以采用直接插入排序或直接選擇排序。由于直接插入排序所需的記錄移動操作較直接選擇排序多,因而當記錄本身信息量較大時,用直接選擇排序較好。
      (2) 若文件的初始狀態已按關鍵字基本有序,則選用直接插入或冒泡排序為宜。
      (3) 若n較大,則應采用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序。
      快速排序是目前基于比較的內部排序法中被認為是最好的方法。
      (4) 在基于比較排序方法中,每次比較兩個關鍵字的大小之后,僅僅出現兩種可能的轉移,因此可以用一棵二叉樹來描述比較判定過程,由此可以證明:當文件的n個關鍵字隨機分布時,任何借助于"比較"的排序算法,至少需要O(nlog2n)的時間。

      這句話很重要 它告訴我們自己寫的算法 是有改進到最優 當然沒有必要一直追求最優
      (5) 當記錄本身信息量較大時,為避免耗費大量時間移動記錄,可以用鏈表作為存儲結構
      分享到:
      回復話題
      上傳/修改頭像

      11能被5整除嗎?

      考研論壇提示:
      1、請勿發布個人聯系方式或詢問他人聯系方式,包括QQ和手機等。
      2、未經允許不得發布任何資料出售、招生中介等廣告信息。
      3、如果發布了涉及以上內容的話題或跟帖,您在考研網的注冊賬戶可能被禁用。

      網站介紹 | 關于我們 | 聯系方式 | 廣告業務 | 幫助信息
      ©1998-2015 ChinaKaoyan.com Network Studio. All Rights Reserved.

      中國考研網-聯系地址:上海市郵政信箱088-014號 郵編:200092 Tel & Fax:021 - 5589 1949 滬ICP備12018245號

      国产人片18禁免费看片_1024国产精品免费观看_一级特黄少妇自慰AAA_欧美欧美午夜AⅤ在线观看
    4. <video id="abmqw"><input id="abmqw"></input></video>
    5. <strong id="abmqw"><noscript id="abmqw"></noscript></strong>
    6. <i id="abmqw"><sub id="abmqw"></sub></i>
        <video id="abmqw"></video>
        <output id="abmqw"></output>

      1. <video id="abmqw"><ins id="abmqw"><table id="abmqw"></table></ins></video>

        <wbr id="abmqw"><input id="abmqw"></input></wbr>
      2. <thead id="abmqw"><span id="abmqw"></span></thead>
      3. 亚洲视频一区二区在线观看 | 日韩在线观看不卡视频 | 婷婷网亚洲色偷偷男人的天堂 | 欧美精品免费人爱视频在线观看 | 性色AV乱码一区二区三区2 | 亚洲噜噜网站在线观看 |