排序算法總結
    查看(1994) 回復(11)
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:03
    樓主
    一、插入排序(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
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    沙發
    Procedure InsertSort(Var R : FileType);
    //對R[1..N]按遞增序進行插入排序, R[0]是監視哨//
      Begin
        for I := 2 To N Do //依次插入R[2],...,R[n]//
        begin
          R[0] := R; J := I - 1;
          While R[0] < R[J] Do //查找R的插入位置//
           begin
            R[J+1] := R[J]; //將大于R的元素后移//
            J := J - 1
           end
          R[J + 1] := R[0] ; //插入R //
        end
      End; //InsertSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    3樓
    Procedure InsertSort(Var R : FileType);
    //對R[1..N]按遞增序進行插入排序, R[0]是監視哨//
      Begin
        for I := 2 To N Do //依次插入R[2],...,R[n]//
        begin
          R[0] := R; J := I - 1;
          While R[0] < R[J] Do //查找R的插入位置//
           begin
            R[J+1] := R[J]; //將大于R的元素后移//
            J := J - 1
           end
          R[J + 1] := R[0] ; //插入R //
        end
      End; //InsertSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    4樓
    Procedure InsertSort(Var R : FileType);
    //對R[1..N]按遞增序進行插入排序, R[0]是監視哨//
      Begin
        for I := 2 To N Do //依次插入R[2],...,R[n]//
        begin
          R[0] := R; J := I - 1;
          While R[0] < R[J] Do //查找R的插入位置//
           begin
            R[J+1] := R[J]; //將大于R的元素后移//
            J := J - 1
           end
          R[J + 1] := R[0] ; //插入R //
        end
      End; //InsertSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    5樓
    二、選擇排序
    1. 基本思想:
      每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一趟排序后 13 [38 65 97 76 49 27 49]
    第二趟排序后 13 27 [65 97 76 49 38 49]
    第三趟排序后 13 27 38 [97 76 49 65 49]
    第四趟排序后 13 27 38 49 [49 97 65 76]
    第五趟排序后 13 27 38 49 49 [97 97 76]
    第六趟排序后 13 27 38 49 49 76 [76 97]
    第七趟排序后 13 27 38 49 49 76 76 [ 97]
    最后排序結果 13 27 38 49 49 76 76 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    6樓
    二、選擇排序
    1. 基本思想:
      每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一趟排序后 13 [38 65 97 76 49 27 49]
    第二趟排序后 13 27 [65 97 76 49 38 49]
    第三趟排序后 13 27 38 [97 76 49 65 49]
    第四趟排序后 13 27 38 49 [49 97 65 76]
    第五趟排序后 13 27 38 49 49 [97 97 76]
    第六趟排序后 13 27 38 49 49 76 [76 97]
    第七趟排序后 13 27 38 49 49 76 76 [ 97]
    最后排序結果 13 27 38 49 49 76 76 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    7樓
    二、選擇排序
    1. 基本思想:
      每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一趟排序后 13 [38 65 97 76 49 27 49]
    第二趟排序后 13 27 [65 97 76 49 38 49]
    第三趟排序后 13 27 38 [97 76 49 65 49]
    第四趟排序后 13 27 38 49 [49 97 65 76]
    第五趟排序后 13 27 38 49 49 [97 97 76]
    第六趟排序后 13 27 38 49 49 76 [76 97]
    第七趟排序后 13 27 38 49 49 76 76 [ 97]
    最后排序結果 13 27 38 49 49 76 76 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    8樓
    Procedure SelectSort(Var R : FileType); //對R[1..N]進行直接選擇排序 //
      Begin
        for I := 1 To N - 1 Do //做N - 1趟選擇排序//
         begin
          K := I;
          For J := I + 1 To N Do //在當前無序區R[I..N]中選最小的元素R[K]//
           begin
            If R[J] < R[K] Then K := J
           end;
          If K <> I Then //交換R和R[K] //
            begin Temp := R; R := R[K]; R[K] := Temp; end;
         end
      End; //SelectSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    9樓
    Procedure SelectSort(Var R : FileType); //對R[1..N]進行直接選擇排序 //
      Begin
        for I := 1 To N - 1 Do //做N - 1趟選擇排序//
         begin
          K := I;
          For J := I + 1 To N Do //在當前無序區R[I..N]中選最小的元素R[K]//
           begin
            If R[J] < R[K] Then K := J
           end;
          If K <> I Then //交換R和R[K] //
            begin Temp := R; R := R[K]; R[K] := Temp; end;
         end
      End; //SelectSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:04
    10樓
    Procedure SelectSort(Var R : FileType); //對R[1..N]進行直接選擇排序 //
      Begin
        for I := 1 To N - 1 Do //做N - 1趟選擇排序//
         begin
          K := I;
          For J := I + 1 To N Do //在當前無序區R[I..N]中選最小的元素R[K]//
           begin
            If R[J] < R[K] Then K := J
           end;
          If K <> I Then //交換R和R[K] //
            begin Temp := R; R := R[K]; R[K] := Temp; end;
         end
      End; //SelectSort //
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    11樓
    三、冒泡排序(BubbleSort)
    1. 基本思想:
      兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反時即進行交換,直到沒有反序的數據元素為止。
    2. 排序過程:
      設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復進行,直至最后任何兩個氣泡都是輕者在上,重者在下為止。
    【示例】:
    49 13 13 13 13 13 13 13
    38 49 27 27 27 27 27 27
    65 38 49 38 38 38 38 38
    97 65 38 49 49 49 49 49
    76 97 65 49 49 49 49 49
    13 76 97 65 65 65 65 65
    27 27 76 97 76 76 76 76
    49 49 49 76 97 97 97 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    12樓
    三、冒泡排序(BubbleSort)
    1. 基本思想:
      兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反時即進行交換,直到沒有反序的數據元素為止。
    2. 排序過程:
      設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復進行,直至最后任何兩個氣泡都是輕者在上,重者在下為止。
    【示例】:
    49 13 13 13 13 13 13 13
    38 49 27 27 27 27 27 27
    65 38 49 38 38 38 38 38
    97 65 38 49 49 49 49 49
    76 97 65 49 49 49 49 49
    13 76 97 65 65 65 65 65
    27 27 76 97 76 76 76 76
    49 49 49 76 97 97 97 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    13樓
    三、冒泡排序(BubbleSort)
    1. 基本思想:
      兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反時即進行交換,直到沒有反序的數據元素為止。
    2. 排序過程:
      設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復進行,直至最后任何兩個氣泡都是輕者在上,重者在下為止。
    【示例】:
    49 13 13 13 13 13 13 13
    38 49 27 27 27 27 27 27
    65 38 49 38 38 38 38 38
    97 65 38 49 49 49 49 49
    76 97 65 49 49 49 49 49
    13 76 97 65 65 65 65 65
    27 27 76 97 76 76 76 76
    49 49 49 76 97 97 97 97
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    14樓
    Procedure BubbleSort(Var R : FileType) //從下往上掃描的起泡排序//
    Begin
      For I := 1 To N-1 Do //做N-1趟排序//
       begin
         NoSwap := True; //置未排序的標志//
         For J := N - 1 DownTo 1 Do //從底部往上掃描//
          begin
           If R[J+1]< R[J] Then //交換元素//
            begin
             Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
             NoSwap := False
            end;
          end;
         If NoSwap Then Return//本趟排序中未發生交換,則終止算法//
        end
    End; //BubbleSort//
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    15樓
    Procedure BubbleSort(Var R : FileType) //從下往上掃描的起泡排序//
    Begin
      For I := 1 To N-1 Do //做N-1趟排序//
       begin
         NoSwap := True; //置未排序的標志//
         For J := N - 1 DownTo 1 Do //從底部往上掃描//
          begin
           If R[J+1]< R[J] Then //交換元素//
            begin
             Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
             NoSwap := False
            end;
          end;
         If NoSwap Then Return//本趟排序中未發生交換,則終止算法//
        end
    End; //BubbleSort//
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:05
    16樓
    Procedure BubbleSort(Var R : FileType) //從下往上掃描的起泡排序//
    Begin
      For I := 1 To N-1 Do //做N-1趟排序//
       begin
         NoSwap := True; //置未排序的標志//
         For J := N - 1 DownTo 1 Do //從底部往上掃描//
          begin
           If R[J+1]< R[J] Then //交換元素//
            begin
             Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
             NoSwap := False
            end;
          end;
         If NoSwap Then Return//本趟排序中未發生交換,則終止算法//
        end
    End; //BubbleSort//
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:06
    17樓
    四、快速排序(Quick Sort)
    1. 基本思想:
      在當前無序區R[1..H]中任取一個數據元素作為比較的"基準"(不妨記為X),用此基準將當前無序區劃分為左右兩個較小的無序區:R[1..I-1]和R[I+1..H],且左邊的無序子區中數據元素均小于等于基準元素,右邊的無序子區中數據元素均大于等于基準元素,而基準X則位于最終排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),當R[1..I-1]和R[I+1..H]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中的數據元素均已排序為止。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一次交換后
    [27 38 65 97 76 13 49 49]
    第二次交換后
    [27 38 49 97 76 13 65 49]
    J向左掃描,位置不變,第三次交換后
    [27 38 13 97 76 49 65 49]
    I向右掃描,位置不變,第四次交換后
    [27 38 13 49 76 97 65 49]
    J向左掃描
    [27 38 13 49 76 97 65 49]
    (一次劃分過程)

    初始關鍵字
    [49 38 65 97 76 13 27 49]
    一趟排序之后
    [27 38 13] 49 [76 97 65 49]
    二趟排序之后
    [13] 27 [38] 49 [49 65]76 [97]
    三趟排序之后 13 27 38 49 49 [65]76 97
    最后的排序結果 13 27 38 49 49 65 76 97
    各趟排序之后的狀態
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:06
    18樓
    四、快速排序(Quick Sort)
    1. 基本思想:
      在當前無序區R[1..H]中任取一個數據元素作為比較的"基準"(不妨記為X),用此基準將當前無序區劃分為左右兩個較小的無序區:R[1..I-1]和R[I+1..H],且左邊的無序子區中數據元素均小于等于基準元素,右邊的無序子區中數據元素均大于等于基準元素,而基準X則位于最終排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),當R[1..I-1]和R[I+1..H]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中的數據元素均已排序為止。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一次交換后
    [27 38 65 97 76 13 49 49]
    第二次交換后
    [27 38 49 97 76 13 65 49]
    J向左掃描,位置不變,第三次交換后
    [27 38 13 97 76 49 65 49]
    I向右掃描,位置不變,第四次交換后
    [27 38 13 49 76 97 65 49]
    J向左掃描
    [27 38 13 49 76 97 65 49]
    (一次劃分過程)

    初始關鍵字
    [49 38 65 97 76 13 27 49]
    一趟排序之后
    [27 38 13] 49 [76 97 65 49]
    二趟排序之后
    [13] 27 [38] 49 [49 65]76 [97]
    三趟排序之后 13 27 38 49 49 [65]76 97
    最后的排序結果 13 27 38 49 49 65 76 97
    各趟排序之后的狀態
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:06
    19樓
    四、快速排序(Quick Sort)
    1. 基本思想:
      在當前無序區R[1..H]中任取一個數據元素作為比較的"基準"(不妨記為X),用此基準將當前無序區劃分為左右兩個較小的無序區:R[1..I-1]和R[I+1..H],且左邊的無序子區中數據元素均小于等于基準元素,右邊的無序子區中數據元素均大于等于基準元素,而基準X則位于最終排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),當R[1..I-1]和R[I+1..H]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中的數據元素均已排序為止。
    2. 排序過程:
    【示例】:
    初始關鍵字 [49 38 65 97 76 13 27 49]
    第一次交換后
    [27 38 65 97 76 13 49 49]
    第二次交換后
    [27 38 49 97 76 13 65 49]
    J向左掃描,位置不變,第三次交換后
    [27 38 13 97 76 49 65 49]
    I向右掃描,位置不變,第四次交換后
    [27 38 13 49 76 97 65 49]
    J向左掃描
    [27 38 13 49 76 97 65 49]
    (一次劃分過程)

    初始關鍵字
    [49 38 65 97 76 13 27 49]
    一趟排序之后
    [27 38 13] 49 [76 97 65 49]
    二趟排序之后
    [13] 27 [38] 49 [49 65]76 [97]
    三趟排序之后 13 27 38 49 49 [65]76 97
    最后的排序結果 13 27 38 49 49 65 76 97
    各趟排序之后的狀態
    分享到:
    lyh2006
    • 積分:1982
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:06
    20樓
    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
    • 注冊于:2010-08-01
    發表于 2010-08-13 23:06
    21樓
    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 //
    分享到:
    1 2 [>] 最后頁  
    回復話題
    上傳/修改頭像

    中國哪個名族人口最多?(答案為一個字)

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

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

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

    亚洲AV无码一区二区乱子伦| 欧洲成人午夜精品无码区久久 | 亚洲精品~无码抽插 | 亚洲VA成无码人在线观看天堂| 亚洲av日韩av无码黑人| 亚洲精品无码久久久| 中文字幕av无码专区第一页 | 国产精品VA在线观看无码不卡| 中文无码久久精品| 日韩AV无码精品人妻系列| 日本精品久久久久中文字幕8| A级毛片无码久久精品免费| 中文无码喷潮在线播放| 亚洲AV永久无码精品水牛影视| 中文亚洲AV片在线观看不卡| 午夜无码伦费影视在线观看| 久久精品aⅴ无码中文字字幕不卡| 无码人妻精品一区二区三区66| 台湾佬中文娱乐网22| 精品无码一级毛片免费视频观看| 中文字幕无码成人免费视频| 亚洲熟妇少妇任你躁在线观看无码 | 免费a级毛片无码a∨免费软件| 内射无码午夜多人| 亚洲AV区无码字幕中文色| 日本中文字幕免费看| 久クク成人精品中文字幕 | 亚洲色无码一区二区三区| 暖暖日本中文视频| 久99久无码精品视频免费播放| 亚洲精品无码久久久影院相关影片| 日本免费中文视频| 亚洲日韩VA无码中文字幕| 69久久精品无码一区二区| 亚洲av无码专区在线播放| 中文字幕亚洲精品无码| 亚洲欧美日韩中文字幕在线不卡| 国产综合无码一区二区三区| 无码人妻黑人中文字幕| 亚洲一区无码中文字幕| 狠狠精品久久久无码中文字幕|