排序算法總結
    查看(1991) 回復(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號

    久久久久无码精品国产app| 一本大道香蕉中文在线高清| 精品人妻va出轨中文字幕| 国产综合无码一区二区辣椒| 国产精品无码一区二区在线| 最近中文字幕完整版资源| 日韩乱码人妻无码中文字幕久久| 亚洲乱码中文字幕综合| 亚洲av福利无码无一区二区| 一本色道无码道在线| 亚洲AV无码精品色午夜果冻不卡| 久久中文字幕人妻熟av女| 亚洲乱码中文字幕手机在线| 波多野42部无码喷潮在线 | 中文无码伦av中文字幕| 亚洲va无码专区国产乱码| 亚洲中文字幕无码爆乳AV| 国产精品无码专区| 野花在线无码视频在线播放| 美丽姑娘免费观看在线观看中文版 | 亚洲国产精品成人AV无码久久综合影院 | 国产办公室秘书无码精品99| 日韩精品一区二区三区中文字幕 | 中文字幕你懂的| 无码人妻一区二区三区精品视频 | 中文字幕无码免费久久| 中文无码伦av中文字幕| 国产网红主播无码精品 | 国产丰满乱子伦无码专区| 亚洲中文字幕无码爆乳AV| 久久久无码精品亚洲日韩软件| 免费无码午夜福利片69| 最近新中文字幕大全高清| 中文字幕乱妇无码AV在线| 好硬~好爽~别进去~动态图, 69式真人无码视频免 | 久久无码中文字幕东京热| 天堂а√在线中文在线最新版| 久久影院午夜理论片无码| 麻豆aⅴ精品无码一区二区| 国产成人A亚洲精V品无码| 亚洲日韩在线中文字幕综合|