SlideShare a Scribd company logo
1 of 41
การเรีย งลำา ดับ ข้อ มูล (Sorting)
การเรียงข้อมูลแบ่งได้เป็นสองลักษณะคือ
 1. การเรีย งข้อ มูล แบบภายใน (Internal Sorting)
    ข้อมูลจะเก็บอยู่ในหน่วยความจำาหลัก (main
memory) และการเรียงลำาดับข้อมูลสามารถอ่านข้อมูล
แต่ละชิ้นจากหน่วยความจำาหลักหรือเขียนข้อมูลสู่
หน่วยความจำาหลักได้เลย โดยไม่จำาเป็นต้องใช้หน่วย
ความจำารอง เช่น ดิสก์ (disk) หรือเทป (tape) สำาหรับเก็บ
ผลลัพธ์ชั่วคราว



                                                      1
2. การเรีย งลำา ดับ ข้อ มูล แบบภายนอก (External
Sorting)
    ข้อมูลมีจำานวนมากเกินกว่าทีจะบรรจุลงในพืนที่
                               ่            ้
ความจำาหลักได้หมดภายในคราวเดียว จึงต้องแบ่ง
ข้อมูลออกเป็นส่วนย่อย ๆ ซึ่งแต่ละส่วนมีขนาดใหญ่
พอทีจะอยูในหน่วยความจำาหลักได้ และจะได้รับการ
      ่     ่
เรียงโดยใช้แบบการคำานวณ การเรียงข้อมูลแบบ
ภายนอกจะต้องคิดถึงเวลาทีสูญเสียไปอันเนื่องจาก
                           ่
การถ่ายเทข้อมูลระหว่างเทปหรือดิสค์กับหน่วยความ
จำาหลักด้วย เวลาทีสูญเสียไปในการถ่ายเทปข้อมูล
                   ่
ระหว่างหน่วยความจำาหลักกับเทปหรือดิสค์จะเป็นตัว
ระบุความดีเลวของแบบการคำานวณแบบเรียงข้อมูล
ภายนอก
                                                  2
การเรีย งลำา ดับ แบบ Bubble Sort
      bubble sort เป็นแบบหนึงของ exchange sort จะ
                            ่
เปรียบ เทียบค่า 2 ค่าทีติดกัน ถ้าไม่ได้อยู่ในลำาดับที่
                       ่
เรากำาหนด เช่นจากน้อยไปมาก ก็ให้แลกเปลี่ยน
ตำาแหน่งของค่าทัง 2 ค่านัน แล้วเอาค่าน้อย (หรือค่า
                 ้        ้
มาก ถ้าเป็นการเรียงจากค่ามากไปหาค่าน้อย)
เปรียบเทียบกับค่าถัดไปอีกเป็นเช่นนีตลอดไป
                                     ้
จนกว่าอยูในลำาดับทีถูกต้อง
          ่          ่
      สมมติวามีรายการข้อมูล 5, 1,10, 3, 15, 2 จะ
             ่
เรียงโดยเทคนิคของ Bubble Sort (โดยต้องการเรียง
จากน้อยไปมากตามแนวบนลงล่าง) ทำาดังนี้


                                                     3
ขั้นตอนการทำางาน
         5    1    10    3      15   2          รอบที่ 1
              สลับ
          1   5    10    3    15     2



          1   5    10    3    15     2
                         สลับ
         1    5    3     10     15   2


          1   5      3   10     15   2
                                         สลับ
          1   5      3   10      2   15

                                                           4
1   5   3      10   2    15   รอบที่ 2

1   5   3      10   2    15
        สลับ
1   3   5      10   2    15


1   3   5      10   2    15


1   3   5      2    10   15
รอบที่ 3
1   3   5   2   10   15



1   3   5   2   10   15


1   3   5   2   10   15
            สลับ
1   3   2   5   10   15
รอบที่ 4
1   3   2      5   10   15



1   3   2      5   10   15
        สลับ
1   2   3      5   10   15
2. การเรีย งลำา ดับ แบบฮีฟ ซอร์ท
 (Heap Sort)
     Heap เป็นต้นไม้ไบนารีที่มคุณสมบัติว่าโหนดใด ๆ ใน
                              ี
ต้นไม้นนจะมีค่า
        ั้
คีย์ใหญ่กว่าค่าคียทอยูใน left son และ right son ของมัน (ถ้า
                    ์ ี่ ่
โหนดนันมีลูก) ตัวอย่างดังรูป(ก) เป็น heap ส่วนรูปที่ (ข)
           ้     90                      70
ไม่ใช่ heap
             45       35           60          50
     39        22 33 30       35     75 30 40
                   20
     รูป ก โครงสร้าง             รูป ข ไม่ใช่
     Heap                        โครงสร้าง Heap

                                                       8
ขั้น ตอนการทำา            Heap Sort

   มี 3 ขั้นตอน ได้แก่
    1. สร้างโครงสร้าง heap
    2. เอาต์พุตคีย์ที่รูตโหนด
    3. ปรับแต่งต้นไม้ทเหลือให้เป็น heap
                         ี่
ารสร้า งโครงสร้า ง heap
   ตัวอย่างจงสร้างต้นไม้แบบ heap จากข้อมูลต่อไปนี้
           22 35 42 38 32 26 27 90
  อินพุต        ก่อนเป็นโครงสร้าง heap   โครงสร้าง heap
   22            22                            22
            I
   35                  22    I 35                35
                  35        22              22
    4           35              42 I           42
    2      22        42 I    22   35      22        35

                                                      10
ก่อนเป็นโครงสร้าง Heap     โครงสร้าง
อินพุต    42       I    42           Heap42
  38
       22    35      38     35        38      35
      38               22          22
            I
 32               42                         42
            38             35           38        35
       22        32    I           22        32




                                                   11
อินพุ     ก่อนเป็นโครงสร้าง       โครงสร้าง
ต         Heap42                  Heap42
 26                                38       35
            38      35
                          I       22    32 26
        22    32 26
  2             42                       42
           38        35            38         35
  7                           I
        22    32   26    27       22 32 26       27




                                                   12
อินพุต       ก่อนเป็นโครงสร้าง    โครงสร้าง
             Heap                 Heap
                     42
                38       35
             22       32 26 27
             90   I
  90                    42
         I        38         35
             90        32 26
                             27
             22



                                              13
อินพุต     ก่อนเป็นโครงสร้าง        โครงสร้าง
           Heap                     Heap
                   42
         I    38       35
          90    32 26 27
                                      90
         22
  90                 42         42         35
          I
               90         35
                               38    32 26 27
          38        32 26
                          27
         22                    22

                               โครงสร้างHea
                               p ทีได้
                                   ่
                                                14
โครงสร้าง heap ทีได้กคืออาร์เรย์
                   ่  ็
 ดังรูปที่ 6 2 3 4 5 6 7 8
            1
        A 90 42 35 38 32 26 27 22

ต้นไม้ที่เห็นระหว่างการสร้าง heap นั้น เป็นการ
ตีความข้อมูลในอาร์เรย์ หลังจากที่ข้อมูลเรียงในรูป
โครงสร้าง heap แล้ว จะเอาเอาต์พุตค่ารูตโหนด
ซึ่งอยู่ที่ตำาแหน่งที่ 1 ในอาร์เรย์ การเอาต์พุตจะให้
ค่า A(1) แลกที่กับค่าสุดท้ายของอาร์เรย์ A(8) การ
แทนในรูปต้นไม้ ค่าที่เอาต์พุตไปแล้วจะแทนโดย
โหนดสีเหลี่ยม
           ่

                                               15
ต้นไม้รูปที่ 7 (ข) ที่ได้ (ไม่นับโหนดสีเหลี่ยม) ไม่
                                       ่
เป็นโครงสร้าง heap จากนี้ต่อไปเราต้องใช้อัลกอ
ริทึมปรับค่าคีย์ต่าง ๆ ในต้นไม้ให้มีคุณสมบัติ
heap
                                             22
               90
          42        35             42                  35
     38        26        27    38       32        26        27
22                            90
     (ก) ก่อนเอาต์พุต              (ข) หลังเอาต์พต
                                                 ุ
     ค่า 90                        ค่า 90


                                                            16
รับ ต้น ไม้ท ี่ไ ด้จ ากการแลกค่า ให้ม ีค ณ สมบัต ิ Heap
                                         ุ
   การปรับแต่งทำาได้โดยเลือนค่าที่ รูตโหนดจากบนลง
                          ่
   มาล่างดังนี้
    ขั้นที่ 1 : ให้ตั้งต่าพอยน์เตอร์ I ชี้ไปยังรูตโหนด
    ขั้นที่ 2 : ให้เลือกค่าที่ใหญ่ทสุดระหว่าง left son และ
                                   ี่
    right son ของโหนด I เป็น           ค่าทีเลื่อนมาอยู่ที่
                                             ่
    ตำาแหน่ง I ส่วนค่าคีย์ทตำาแหน่ง I ก็เลื่อนไปอยูที่
                           ี่                        ่
    ตำาแหน่ง left son หรือ right son ของมันทีมค่าใหญ่
                                                    ่ ี
    กว่า จากนันเลื่อน พอยน์เตอร์ I มาอยู่ทตำาแหน่งใหม่นี้
                ้                                ี่

    ขั้นที่ 3    : ทำาขั้นที่ 2 จนกว่าจะทำาไม่ได้


                                                      17
I                        42
          22                    I
                               22           35
     42         35
                          38        32 26            27
38    32 26 27
                       90            (ข)
90        (ก)
                                42
                          38               35
                     I
                     22        32    26         27
                                    (ค)
                   90
                รูป ค. การปรับต้นไม้ให้มคุณสมบัต
                                        ี
                Heap                                      18
I                            38
          27                      I
                                 27                35
     38         35
                             22       32 26             42
22      32 26 42
                          90             (ข)
90
     (ก) เอาต์พุตค่า
                             38
     42 ได้
                       32                35
                             I
                 22         27    26          42
                90
                     (ค) ต้นไม้นี้เป็น
                     Heap                                    19
20
3. การเรีย งลำา ดับ แบบ Quick
Sort
      quick sort เป็นวิธีการเรียงลำาดับข้อมูลที่
    เหมาะกับลิสต์(รายการข้อมูล)ขนาดใหญ่ และ
   เป็นวิธีเรียงข้อมูลทีให้ค่าเฉลี่ยของเวลาทีใช้นอย
                         ่                         ่   ้
    ทีสุดเท่าทีค้นพบวิธีหนึง สมมติ A(K1, K2, ...,
      ่         ่             ่
    Kn) เป็นลิสต์ของค่าหรือ         เรคอร์ดทียงไม่ได้
                                             ่ ั
  เรียง จะเลือก K1 จากนันจะแบ่งลิสต์ A นีออกเป็น
                            ้                    ้
               2 ลิสต์ย่อย S1 และ S2 โดยที่
           S1 ประกอบด้วยเรคอร์ดทีมค่าคีย์นอยกว่า
                                      ่ ี            ้
                              K1
          S2 ประกอบด้วยเรคอร์ดทีมีค่าคียมากกว่า
                                       ่       ์
                              K1                         21
ลิสต์ {S1} และ {S2} เป็นค่าต่าง ๆ ทียงไม่ได้เรียง
                                            ่ ั
   จากนันก็ทำาวิธีดังกล่าวซำ้ากับ {S1} และ {S2} ตาม
         ้
ลำาดับ (อย่างรีเคอร์ซีฟ) ในทีสุดก็จะได้ลิสต์ทเรียงตาม
                               ่                  ี่
                ทีต้องการ มีขั้นตอนดังนี้
                    ่
               1. การเรียงข้อมูลจะเริ่มโดยใช้พอยน์
              เตอร์ 2 ตัวคือ F และ R
ให้ F มีค่า 1 ซึ่งก็คือชี้ไปยังค่าคีย์ตัวแรก ส่วน R มีค่า
  เท่ากับ n นันคือชี้ไปยังค่าคีย์ตัวสุดท้ายในลิสต์
                  ่
             2. เปรียบเทียบระหว่างค่าที่ถูกชี้โดย F
 และ R จากนันแบ่งลิสต์นี้ออกเป็น 2 ลิสต์ยอย โดย
                ้                               ่
 ใช้ค่า K1 เป็นตัวเปรียบเทียบ ฉะนันพอยน์เตอร์ที่ชี้
                                         ้
 ไปยัง K1 ไม่ว่าจะเป็น F หรือ R จะไม่เป็นตัวเลื่อนไป
                      ยังตำาแหน่งอื่น)               22
“ให้เลื่อนพอยน์เตอร์ตัวทีไม่ใช่ชี้ไปยังค่า K1 หรือทีทำา
                           ่                        ่
หน้าที่ K1 ในการเรียงเทียวนัน เมือ F พบ R ทีค่า K1 ก็
                         ่      ้  ่           ่
เป็นอันว่าเสร็จสิ้นการเรียงเทียวนั้น”
                              ่

ให้ชดคีย์ที่จะเรียงมีดังนี้ (27, 15, 22, 37,
    ุ
11, 59, 18, 50, 42)
  การเรีย งแถวที่ 1
   27 15  22  37                            11
59 18  50  42
    F
  R
   27 15  22  37                            11    23
27    15    22   37
11     59    18     50    42
แลกที่       F
         R
               18   15    22    37
11    59      27    50    42
               F
R
              18 15   22  37
11    59      27   50  42
                                     24
                  F
18    15    22   37
11     59   27    50    42
แลกที่                    F
 R
             18   15    22    27
11    59    37    50    42
                              F
            R
            18 15  22  27
11    59    37  50  42
                                   25
                       F
18        15       22        27
11     59       37        50       42
แลกที่                                    F
 R
                  18      15       22       11
27         59    37       50       42
                                            F
R จุดนี้
 ณ       คีย์ 27 ได้แบ่งลิสต์ทกำาหนดให้เป็นลิสต์
                              ี่
 ย่อย 2 ลิสต์ ดังนี้
             (18, 18 22, 11) 27 (59, 37,
                     15, 15       22       11
 50, 42)
27         59     37       50       42
                                                   26
18    15   22 11)
(27)   (59 37    50   42)
แลกที่     F                R
           (11   15   22 18)
(27) (59    37   50   42)
            F             R
        (11      15   22   18)
    ……….
                 F         R

                                27
(11     15    22     18)
(27)     (59 37      50    42)
แลกที่                    F      R
               (11   15    18     22)
(27)     (59    37   50   42)
                            F    R
               (11   15   18      22)
   ……….
                         FR
               (11 15)  (18) (22)
                                  28
(27) (59       37 50 42)
11   15 18        22        27 (59        37
      50   42)
                        F                         R
                .....             (42      37    50
  59)
                         F                  R
           .…                (42        37 50
59)
                             F          R
           ….                    (42    37 50
59)
                                                F
 R                                              29
11 15 18             22    27 (42          37
50) (59)
                      F                R
 11    15 18         22    27 (42          37
50)     (59)
                      F     R
 11    15 18         22    27 (37          42
50)     (59)
                           F      R
 11 15 18            22    27 (37) (42)
(50) 59)
                                      FR
      เป็นชุดคียทเรียงเรียบร้อยแล้ว
                ์ ี่
                                            30
4. การเรีย งลำา ดับ แบบ Radix
Sort
  การเรียงแบบนี้เราจะใช้แต่ละตำาแหน่ง
  ตัวเลขของแต่ละคีย์ โดยเริ่มตั้งแต่ตำาแหน่ง
  นัยสำาคัญน้อยที่สุด (least significant
  digit) การเรียงก็ง่ายมาก ขั้นแรกให้
  เตรียมถัง 10 ถัง (“ถัง” ในที่นี้อาจเป็นคิว
  หรืออาร์เรย์ก็ได้) ในแต่ละเที่ยวของการ
  เรียงจะใส่คาคีย์ไปเข้าแต่ละถังตามค่าตัว
             ่
  เลขในแต่ละตำาแหน่ง)


                                           31
ให้ชุดคียทจะเรียงมีดังนี้ (156, 425, 679, 128,
         ์ ี่
420, 067, 772, 895, 825)
      การเรีย งเทีย วที่ 1 กระจายค่าคียไปตามถังต่าง
                   ่                   ์
ๆ ตามค่าตัวเลขทีตำาแหน่งขวาสุด 156 425 679
                ่
 128 420 067 772 895 825
      ถังที่ 0       420
      ถังที่ 1
      ถังที่ 2    772
      ถังที่ 3
      ถังที่ 4
      ถังที่ 5    425 895 825
      ถังที่ 6    156
      ถังที่ 7    067
      ถังที่ 8    128
      ถังที่ 9    679                          32
เมื่ออ่านค่าในแต่ละถังออกมาตามลำาดับจะได้ค่าต่าง
ๆ ดังนี้
420 772 425 895 825 156 067
128 679
         การเรีย งเทีย วที่ 2
                     ่
             420 772 425 895 825 156
  067 128 679
         ถังที่ 0
         ถังที่ 1
         ถังที่ 2 420 425 825 128
         ถังที่ 3
         ถังที่ 4
         ถังที่ 5 156
         ถังที่ 6 067
         ถังที่ 7 772 679                       33
เมืออ่านค่าต่าง ๆ ในแต่ละถังออกมาตามลำาดับจะได้
   ่
       420 425 825 128 156 067
772 679 895
       การเรีย งเทีย วที่ 3 ในเทียวนีเราจะ
                   ่             ่   ้
พิจารณาตำาแหน่งซ้ายสุด
           420 425 825 128 156 067
772 679 895
       ถังที่ 0   067
       ถังที่ 1   128 156
       ถังที่ 2
       ถังที่ 3
       ถังที่ 4   420 425
       ถังที่ 5
       ถังที่ 6   679
       ถังที่ 7   772                         34
เมื่ออ่านค่าต่าง ๆ ในแต่ละถังออกมาจะได้ชด
                                        ุ
คีย์ที่เรียงแล้วเป็นดังนี้
        067 128 156 420 425
679 772 825 895




                                        35
5. การเรีย งลำา ดับ แบบ Shell Sort
       การเรียงลำาดับแบบ Shell Sort จะทำาการแบ่ง
ข้อมูล โดยกำาหนดค่าทีจะอยู่ในลิสต์ยอยหนึ่ง ๆ ด้วย
                           ่                 ่
การกำาหนดค่า h เป็นระยะทางระหว่างค่าสองค่าใด ๆ
ในคียชุดนั้นทีจะอยู่ในลิสต์ยอย แต่ละลิสต์ยอยจะมี
         ์      ่              ่                  ่
    การเลือกค่า hi วิธีการเลือกค่า hi มีอยู่หลายแบบ
คีย์อยู่ประมาณ n/h ค่า
ในทีนี้จะกล่าวถึง 2 แบบ คือ
       ่
    1. ให้เลือก hi = 2i - 1 โดยที่ค่า i อยูระหว่าง 1 และ
                                           ่
(log2 n)
  2. ชุดค่า hi ที่ใช้ไ = ีอ แบบหนึ่งกำาหนดโดย
                     Hi ด้ด3iีก-
                           12
สมการ บค่า i อยูระหว่าง 1 และ t โดยที่ t เป็นค่า
  สำาหรั           ่
  จำานวนเต็มน้อยที่สดทีสอดคล้องกับ อสมการ ht
                          ุ ่
   + 2 >= n

                                                     36
ตัว อย่า ง

         จงเรียงลำาดับข้อมูลต่อไปนี้ 37, 32, 14, 45,
  92, 18, 19, 34, 31, 35 โดยใช้
  วิธีการเรียงลำาดับแบบ Shell Sort
  ขั้น ตอนการทำา งาน
         จะเลือกค่า hi จากแบบ (1) ทีกล่าวมาแล้ว เนืองจาก
                                       ่           ่
  n = 10 จะได้ว่า
  (log2 10) = 3
         ดังนั้นค่า i ทีใช้คือ 3, 2 และ 1 และจากสมการ hi =
                        ่
  2i - 1 จะได้
  h3 = 7, h2 = 3, h1 = 1 ตามลำาดับ

                                                     37
การเรียง           H3= 7
เที่ยวที่ 1
    37        32    14      45   92   18
    19        34   31      35


 การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่
 แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คือ
 (37, 34) (32, 31) (14, 35) หลังจาก
 การเรียงแต่ละลิสต์ย่อยแล้วจะได้ชดตัวเลข
                                     ุ
 ดังนี้


                                               38
การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่แสดง
โดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คอ (37, 34)
                                 ื
(32, 31) (14, 35) หลังจากการเรียงแต่ละลิสต์
ย่อยแล้วจะได้ชดตัวเลขดังนี้
                 ุ
การเรีย งเที่ย วที่ 2
                         h2= 3
      34 31          14 45         92 18
19 37 32 35




                                           39
การเรียงเที่ยวนี้จะประกอบด้วย 3 ลิสต์ย่อย คือ
(34, 45, 19, 35)
(31, 92, 37) และ (14, 18, 32) หลังจาก
การเรียงแต่ละลิสต์ย่อยแล้วจะได้
       19     31      14   34     37     18
 35     92       32    45

การเรีย งเทีย วที่ 3 h1= 1
             ่
      การเรียงเทียวนีจะประกอบด้วยลิสต์เพียงลิสต์
                  ่  ้
เดียว นั่นคือทุกค่าในลิสต์นี้ การเรียงเท่ากับการใช้
insertion sort หรือการเรียงแบบอื่น ๆ

        19  31  14            34     37     18
35     92  32  45                                     40
แบบฝึก หัด

1. จากข้อมูล 156, 425, 679, 128, 420, 067,
     772, 895, 835 จงเรียงลำาดับ
   ข้อมูลจากน้อยไปหามากด้วยวิธีการเรียงแบบ
    Bubble Sort
2. จงเรียงลำาดับโดย Bubble Sort และสร้างต้นไม้
    แบบ Heap จากข้อมูลต่อไปนี้
         45 , 20 , 9 , 100 , 32 , 28 , 1
3. จากโครงสร้างต้นไม้แบบ Heap ทีได้ในข้อ 2 ให้
                                   ่
    นำาเอาท์พตที่ Root Nod
             ุ
    ออก พร้อมปรับแต่งต้นไม้ให้เป็น Heap



                                           41

More Related Content

More from suebloei

More from suebloei (6)

Nsc2012
Nsc2012Nsc2012
Nsc2012
 
Graph
GraphGraph
Graph
 
Mark test
Mark testMark test
Mark test
 
Tree
TreeTree
Tree
 
Stack
StackStack
Stack
 
Check box
Check boxCheck box
Check box
 

Sorting

  • 1. การเรีย งลำา ดับ ข้อ มูล (Sorting) การเรียงข้อมูลแบ่งได้เป็นสองลักษณะคือ 1. การเรีย งข้อ มูล แบบภายใน (Internal Sorting) ข้อมูลจะเก็บอยู่ในหน่วยความจำาหลัก (main memory) และการเรียงลำาดับข้อมูลสามารถอ่านข้อมูล แต่ละชิ้นจากหน่วยความจำาหลักหรือเขียนข้อมูลสู่ หน่วยความจำาหลักได้เลย โดยไม่จำาเป็นต้องใช้หน่วย ความจำารอง เช่น ดิสก์ (disk) หรือเทป (tape) สำาหรับเก็บ ผลลัพธ์ชั่วคราว 1
  • 2. 2. การเรีย งลำา ดับ ข้อ มูล แบบภายนอก (External Sorting) ข้อมูลมีจำานวนมากเกินกว่าทีจะบรรจุลงในพืนที่ ่ ้ ความจำาหลักได้หมดภายในคราวเดียว จึงต้องแบ่ง ข้อมูลออกเป็นส่วนย่อย ๆ ซึ่งแต่ละส่วนมีขนาดใหญ่ พอทีจะอยูในหน่วยความจำาหลักได้ และจะได้รับการ ่ ่ เรียงโดยใช้แบบการคำานวณ การเรียงข้อมูลแบบ ภายนอกจะต้องคิดถึงเวลาทีสูญเสียไปอันเนื่องจาก ่ การถ่ายเทข้อมูลระหว่างเทปหรือดิสค์กับหน่วยความ จำาหลักด้วย เวลาทีสูญเสียไปในการถ่ายเทปข้อมูล ่ ระหว่างหน่วยความจำาหลักกับเทปหรือดิสค์จะเป็นตัว ระบุความดีเลวของแบบการคำานวณแบบเรียงข้อมูล ภายนอก 2
  • 3. การเรีย งลำา ดับ แบบ Bubble Sort bubble sort เป็นแบบหนึงของ exchange sort จะ ่ เปรียบ เทียบค่า 2 ค่าทีติดกัน ถ้าไม่ได้อยู่ในลำาดับที่ ่ เรากำาหนด เช่นจากน้อยไปมาก ก็ให้แลกเปลี่ยน ตำาแหน่งของค่าทัง 2 ค่านัน แล้วเอาค่าน้อย (หรือค่า ้ ้ มาก ถ้าเป็นการเรียงจากค่ามากไปหาค่าน้อย) เปรียบเทียบกับค่าถัดไปอีกเป็นเช่นนีตลอดไป ้ จนกว่าอยูในลำาดับทีถูกต้อง ่ ่ สมมติวามีรายการข้อมูล 5, 1,10, 3, 15, 2 จะ ่ เรียงโดยเทคนิคของ Bubble Sort (โดยต้องการเรียง จากน้อยไปมากตามแนวบนลงล่าง) ทำาดังนี้ 3
  • 4. ขั้นตอนการทำางาน 5 1 10 3 15 2 รอบที่ 1 สลับ 1 5 10 3 15 2 1 5 10 3 15 2 สลับ 1 5 3 10 15 2 1 5 3 10 15 2 สลับ 1 5 3 10 2 15 4
  • 5. 1 5 3 10 2 15 รอบที่ 2 1 5 3 10 2 15 สลับ 1 3 5 10 2 15 1 3 5 10 2 15 1 3 5 2 10 15
  • 6. รอบที่ 3 1 3 5 2 10 15 1 3 5 2 10 15 1 3 5 2 10 15 สลับ 1 3 2 5 10 15
  • 7. รอบที่ 4 1 3 2 5 10 15 1 3 2 5 10 15 สลับ 1 2 3 5 10 15
  • 8. 2. การเรีย งลำา ดับ แบบฮีฟ ซอร์ท (Heap Sort) Heap เป็นต้นไม้ไบนารีที่มคุณสมบัติว่าโหนดใด ๆ ใน ี ต้นไม้นนจะมีค่า ั้ คีย์ใหญ่กว่าค่าคียทอยูใน left son และ right son ของมัน (ถ้า ์ ี่ ่ โหนดนันมีลูก) ตัวอย่างดังรูป(ก) เป็น heap ส่วนรูปที่ (ข) ้ 90 70 ไม่ใช่ heap 45 35 60 50 39 22 33 30 35 75 30 40 20 รูป ก โครงสร้าง รูป ข ไม่ใช่ Heap โครงสร้าง Heap 8
  • 9. ขั้น ตอนการทำา Heap Sort  มี 3 ขั้นตอน ได้แก่ 1. สร้างโครงสร้าง heap 2. เอาต์พุตคีย์ที่รูตโหนด 3. ปรับแต่งต้นไม้ทเหลือให้เป็น heap ี่
  • 10. ารสร้า งโครงสร้า ง heap ตัวอย่างจงสร้างต้นไม้แบบ heap จากข้อมูลต่อไปนี้ 22 35 42 38 32 26 27 90 อินพุต ก่อนเป็นโครงสร้าง heap โครงสร้าง heap 22 22 22 I 35 22 I 35 35 35 22 22 4 35 42 I 42 2 22 42 I 22 35 22 35 10
  • 11. ก่อนเป็นโครงสร้าง Heap โครงสร้าง อินพุต 42 I 42 Heap42 38 22 35 38 35 38 35 38 22 22 I 32 42 42 38 35 38 35 22 32 I 22 32 11
  • 12. อินพุ ก่อนเป็นโครงสร้าง โครงสร้าง ต Heap42 Heap42 26 38 35 38 35 I 22 32 26 22 32 26 2 42 42 38 35 38 35 7 I 22 32 26 27 22 32 26 27 12
  • 13. อินพุต ก่อนเป็นโครงสร้าง โครงสร้าง Heap Heap 42 38 35 22 32 26 27 90 I 90 42 I 38 35 90 32 26 27 22 13
  • 14. อินพุต ก่อนเป็นโครงสร้าง โครงสร้าง Heap Heap 42 I 38 35 90 32 26 27 90 22 90 42 42 35 I 90 35 38 32 26 27 38 32 26 27 22 22 โครงสร้างHea p ทีได้ ่ 14
  • 15. โครงสร้าง heap ทีได้กคืออาร์เรย์ ่ ็ ดังรูปที่ 6 2 3 4 5 6 7 8 1 A 90 42 35 38 32 26 27 22 ต้นไม้ที่เห็นระหว่างการสร้าง heap นั้น เป็นการ ตีความข้อมูลในอาร์เรย์ หลังจากที่ข้อมูลเรียงในรูป โครงสร้าง heap แล้ว จะเอาเอาต์พุตค่ารูตโหนด ซึ่งอยู่ที่ตำาแหน่งที่ 1 ในอาร์เรย์ การเอาต์พุตจะให้ ค่า A(1) แลกที่กับค่าสุดท้ายของอาร์เรย์ A(8) การ แทนในรูปต้นไม้ ค่าที่เอาต์พุตไปแล้วจะแทนโดย โหนดสีเหลี่ยม ่ 15
  • 16. ต้นไม้รูปที่ 7 (ข) ที่ได้ (ไม่นับโหนดสีเหลี่ยม) ไม่ ่ เป็นโครงสร้าง heap จากนี้ต่อไปเราต้องใช้อัลกอ ริทึมปรับค่าคีย์ต่าง ๆ ในต้นไม้ให้มีคุณสมบัติ heap 22 90 42 35 42 35 38 26 27 38 32 26 27 22 90 (ก) ก่อนเอาต์พุต (ข) หลังเอาต์พต ุ ค่า 90 ค่า 90 16
  • 17. รับ ต้น ไม้ท ี่ไ ด้จ ากการแลกค่า ให้ม ีค ณ สมบัต ิ Heap ุ การปรับแต่งทำาได้โดยเลือนค่าที่ รูตโหนดจากบนลง ่ มาล่างดังนี้ ขั้นที่ 1 : ให้ตั้งต่าพอยน์เตอร์ I ชี้ไปยังรูตโหนด ขั้นที่ 2 : ให้เลือกค่าที่ใหญ่ทสุดระหว่าง left son และ ี่ right son ของโหนด I เป็น ค่าทีเลื่อนมาอยู่ที่ ่ ตำาแหน่ง I ส่วนค่าคีย์ทตำาแหน่ง I ก็เลื่อนไปอยูที่ ี่ ่ ตำาแหน่ง left son หรือ right son ของมันทีมค่าใหญ่ ่ ี กว่า จากนันเลื่อน พอยน์เตอร์ I มาอยู่ทตำาแหน่งใหม่นี้ ้ ี่ ขั้นที่ 3 : ทำาขั้นที่ 2 จนกว่าจะทำาไม่ได้ 17
  • 18. I 42 22 I 22 35 42 35 38 32 26 27 38 32 26 27 90 (ข) 90 (ก) 42 38 35 I 22 32 26 27 (ค) 90 รูป ค. การปรับต้นไม้ให้มคุณสมบัต ี Heap 18
  • 19. I 38 27 I 27 35 38 35 22 32 26 42 22 32 26 42 90 (ข) 90 (ก) เอาต์พุตค่า 38 42 ได้ 32 35 I 22 27 26 42 90 (ค) ต้นไม้นี้เป็น Heap 19
  • 20. 20
  • 21. 3. การเรีย งลำา ดับ แบบ Quick Sort quick sort เป็นวิธีการเรียงลำาดับข้อมูลที่ เหมาะกับลิสต์(รายการข้อมูล)ขนาดใหญ่ และ เป็นวิธีเรียงข้อมูลทีให้ค่าเฉลี่ยของเวลาทีใช้นอย ่ ่ ้ ทีสุดเท่าทีค้นพบวิธีหนึง สมมติ A(K1, K2, ..., ่ ่ ่ Kn) เป็นลิสต์ของค่าหรือ เรคอร์ดทียงไม่ได้ ่ ั เรียง จะเลือก K1 จากนันจะแบ่งลิสต์ A นีออกเป็น ้ ้ 2 ลิสต์ย่อย S1 และ S2 โดยที่ S1 ประกอบด้วยเรคอร์ดทีมค่าคีย์นอยกว่า ่ ี ้ K1 S2 ประกอบด้วยเรคอร์ดทีมีค่าคียมากกว่า ่ ์ K1 21
  • 22. ลิสต์ {S1} และ {S2} เป็นค่าต่าง ๆ ทียงไม่ได้เรียง ่ ั จากนันก็ทำาวิธีดังกล่าวซำ้ากับ {S1} และ {S2} ตาม ้ ลำาดับ (อย่างรีเคอร์ซีฟ) ในทีสุดก็จะได้ลิสต์ทเรียงตาม ่ ี่ ทีต้องการ มีขั้นตอนดังนี้ ่ 1. การเรียงข้อมูลจะเริ่มโดยใช้พอยน์ เตอร์ 2 ตัวคือ F และ R ให้ F มีค่า 1 ซึ่งก็คือชี้ไปยังค่าคีย์ตัวแรก ส่วน R มีค่า เท่ากับ n นันคือชี้ไปยังค่าคีย์ตัวสุดท้ายในลิสต์ ่ 2. เปรียบเทียบระหว่างค่าที่ถูกชี้โดย F และ R จากนันแบ่งลิสต์นี้ออกเป็น 2 ลิสต์ยอย โดย ้ ่ ใช้ค่า K1 เป็นตัวเปรียบเทียบ ฉะนันพอยน์เตอร์ที่ชี้ ้ ไปยัง K1 ไม่ว่าจะเป็น F หรือ R จะไม่เป็นตัวเลื่อนไป ยังตำาแหน่งอื่น) 22
  • 23. “ให้เลื่อนพอยน์เตอร์ตัวทีไม่ใช่ชี้ไปยังค่า K1 หรือทีทำา ่ ่ หน้าที่ K1 ในการเรียงเทียวนัน เมือ F พบ R ทีค่า K1 ก็ ่ ้ ่ ่ เป็นอันว่าเสร็จสิ้นการเรียงเทียวนั้น” ่ ให้ชดคีย์ที่จะเรียงมีดังนี้ (27, 15, 22, 37, ุ 11, 59, 18, 50, 42) การเรีย งแถวที่ 1 27 15 22 37 11 59 18 50 42 F R 27 15 22 37 11 23
  • 24. 27 15 22 37 11 59 18 50 42 แลกที่ F R 18 15 22 37 11 59 27 50 42 F R 18 15 22 37 11 59 27 50 42 24 F
  • 25. 18 15 22 37 11 59 27 50 42 แลกที่ F R 18 15 22 27 11 59 37 50 42 F R 18 15 22 27 11 59 37 50 42 25 F
  • 26. 18 15 22 27 11 59 37 50 42 แลกที่ F R 18 15 22 11 27 59 37 50 42 F R จุดนี้ ณ คีย์ 27 ได้แบ่งลิสต์ทกำาหนดให้เป็นลิสต์ ี่ ย่อย 2 ลิสต์ ดังนี้ (18, 18 22, 11) 27 (59, 37, 15, 15 22 11 50, 42) 27 59 37 50 42 26
  • 27. 18 15 22 11) (27) (59 37 50 42) แลกที่ F R (11 15 22 18) (27) (59 37 50 42) F R (11 15 22 18) ………. F R 27
  • 28. (11 15 22 18) (27) (59 37 50 42) แลกที่ F R (11 15 18 22) (27) (59 37 50 42) F R (11 15 18 22) ………. FR (11 15) (18) (22) 28 (27) (59 37 50 42)
  • 29. 11 15 18 22 27 (59 37 50 42) F R ..... (42 37 50 59) F R .… (42 37 50 59) F R …. (42 37 50 59) F R 29
  • 30. 11 15 18 22 27 (42 37 50) (59) F R 11 15 18 22 27 (42 37 50) (59) F R 11 15 18 22 27 (37 42 50) (59) F R 11 15 18 22 27 (37) (42) (50) 59) FR เป็นชุดคียทเรียงเรียบร้อยแล้ว ์ ี่ 30
  • 31. 4. การเรีย งลำา ดับ แบบ Radix Sort การเรียงแบบนี้เราจะใช้แต่ละตำาแหน่ง ตัวเลขของแต่ละคีย์ โดยเริ่มตั้งแต่ตำาแหน่ง นัยสำาคัญน้อยที่สุด (least significant digit) การเรียงก็ง่ายมาก ขั้นแรกให้ เตรียมถัง 10 ถัง (“ถัง” ในที่นี้อาจเป็นคิว หรืออาร์เรย์ก็ได้) ในแต่ละเที่ยวของการ เรียงจะใส่คาคีย์ไปเข้าแต่ละถังตามค่าตัว ่ เลขในแต่ละตำาแหน่ง) 31
  • 32. ให้ชุดคียทจะเรียงมีดังนี้ (156, 425, 679, 128, ์ ี่ 420, 067, 772, 895, 825) การเรีย งเทีย วที่ 1 กระจายค่าคียไปตามถังต่าง ่ ์ ๆ ตามค่าตัวเลขทีตำาแหน่งขวาสุด 156 425 679 ่ 128 420 067 772 895 825 ถังที่ 0 420 ถังที่ 1 ถังที่ 2 772 ถังที่ 3 ถังที่ 4 ถังที่ 5 425 895 825 ถังที่ 6 156 ถังที่ 7 067 ถังที่ 8 128 ถังที่ 9 679 32
  • 33. เมื่ออ่านค่าในแต่ละถังออกมาตามลำาดับจะได้ค่าต่าง ๆ ดังนี้ 420 772 425 895 825 156 067 128 679 การเรีย งเทีย วที่ 2 ่ 420 772 425 895 825 156 067 128 679 ถังที่ 0 ถังที่ 1 ถังที่ 2 420 425 825 128 ถังที่ 3 ถังที่ 4 ถังที่ 5 156 ถังที่ 6 067 ถังที่ 7 772 679 33
  • 34. เมืออ่านค่าต่าง ๆ ในแต่ละถังออกมาตามลำาดับจะได้ ่ 420 425 825 128 156 067 772 679 895 การเรีย งเทีย วที่ 3 ในเทียวนีเราจะ ่ ่ ้ พิจารณาตำาแหน่งซ้ายสุด 420 425 825 128 156 067 772 679 895 ถังที่ 0 067 ถังที่ 1 128 156 ถังที่ 2 ถังที่ 3 ถังที่ 4 420 425 ถังที่ 5 ถังที่ 6 679 ถังที่ 7 772 34
  • 35. เมื่ออ่านค่าต่าง ๆ ในแต่ละถังออกมาจะได้ชด ุ คีย์ที่เรียงแล้วเป็นดังนี้ 067 128 156 420 425 679 772 825 895 35
  • 36. 5. การเรีย งลำา ดับ แบบ Shell Sort การเรียงลำาดับแบบ Shell Sort จะทำาการแบ่ง ข้อมูล โดยกำาหนดค่าทีจะอยู่ในลิสต์ยอยหนึ่ง ๆ ด้วย ่ ่ การกำาหนดค่า h เป็นระยะทางระหว่างค่าสองค่าใด ๆ ในคียชุดนั้นทีจะอยู่ในลิสต์ยอย แต่ละลิสต์ยอยจะมี ์ ่ ่ ่ การเลือกค่า hi วิธีการเลือกค่า hi มีอยู่หลายแบบ คีย์อยู่ประมาณ n/h ค่า ในทีนี้จะกล่าวถึง 2 แบบ คือ ่ 1. ให้เลือก hi = 2i - 1 โดยที่ค่า i อยูระหว่าง 1 และ ่ (log2 n) 2. ชุดค่า hi ที่ใช้ไ = ีอ แบบหนึ่งกำาหนดโดย Hi ด้ด3iีก- 12 สมการ บค่า i อยูระหว่าง 1 และ t โดยที่ t เป็นค่า สำาหรั ่ จำานวนเต็มน้อยที่สดทีสอดคล้องกับ อสมการ ht ุ ่ + 2 >= n 36
  • 37. ตัว อย่า ง จงเรียงลำาดับข้อมูลต่อไปนี้ 37, 32, 14, 45, 92, 18, 19, 34, 31, 35 โดยใช้ วิธีการเรียงลำาดับแบบ Shell Sort ขั้น ตอนการทำา งาน จะเลือกค่า hi จากแบบ (1) ทีกล่าวมาแล้ว เนืองจาก ่ ่ n = 10 จะได้ว่า (log2 10) = 3 ดังนั้นค่า i ทีใช้คือ 3, 2 และ 1 และจากสมการ hi = ่ 2i - 1 จะได้ h3 = 7, h2 = 3, h1 = 1 ตามลำาดับ 37
  • 38. การเรียง H3= 7 เที่ยวที่ 1 37 32 14 45 92 18 19 34 31 35 การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่ แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คือ (37, 34) (32, 31) (14, 35) หลังจาก การเรียงแต่ละลิสต์ย่อยแล้วจะได้ชดตัวเลข ุ ดังนี้ 38
  • 39. การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่แสดง โดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คอ (37, 34) ื (32, 31) (14, 35) หลังจากการเรียงแต่ละลิสต์ ย่อยแล้วจะได้ชดตัวเลขดังนี้ ุ การเรีย งเที่ย วที่ 2 h2= 3 34 31 14 45 92 18 19 37 32 35 39
  • 40. การเรียงเที่ยวนี้จะประกอบด้วย 3 ลิสต์ย่อย คือ (34, 45, 19, 35) (31, 92, 37) และ (14, 18, 32) หลังจาก การเรียงแต่ละลิสต์ย่อยแล้วจะได้ 19 31 14 34 37 18 35 92 32 45 การเรีย งเทีย วที่ 3 h1= 1 ่ การเรียงเทียวนีจะประกอบด้วยลิสต์เพียงลิสต์ ่ ้ เดียว นั่นคือทุกค่าในลิสต์นี้ การเรียงเท่ากับการใช้ insertion sort หรือการเรียงแบบอื่น ๆ 19 31 14 34 37 18 35 92 32 45 40
  • 41. แบบฝึก หัด 1. จากข้อมูล 156, 425, 679, 128, 420, 067, 772, 895, 835 จงเรียงลำาดับ ข้อมูลจากน้อยไปหามากด้วยวิธีการเรียงแบบ Bubble Sort 2. จงเรียงลำาดับโดย Bubble Sort และสร้างต้นไม้ แบบ Heap จากข้อมูลต่อไปนี้ 45 , 20 , 9 , 100 , 32 , 28 , 1 3. จากโครงสร้างต้นไม้แบบ Heap ทีได้ในข้อ 2 ให้ ่ นำาเอาท์พตที่ Root Nod ุ ออก พร้อมปรับแต่งต้นไม้ให้เป็น Heap 41