ขั้นตอนวิธี Selection sort
Selection sort เป็นวิธีการจัดเรียงข้อมูลที่ใช้วิธีเลือกข้อมูลที่เล็กที่สุดมาเรียงไว้ตามลำดับ
ขั้นตอนวิธีดังนี้ SELECTION-SORT(A) เมื่อ A เป็น array
ข้อมูลเข้า A[1..n]
ข้อมูลออก การจัดเรียงของข้อมูลจำนวน n ตัวใน A โดยที่
A[1] A[2] A[3]
. . . A[n] (sorted in place)
SELECTION-SORT(A)
|
1. for j = 1 to n-1
2. (min, minj) = (A[j], j)
3. for i = j+1 to n
4. if min > A[i]
5. (min, minj) = (A[i], i)
6. endif
7. endfor
8. (A[j], A[minj]) = (A[minj], A[j])
9. endfor
|
ขั้นตอนวิธี Insertion sort
Insertion sort เป็นวิธีการจัดเรียงข้อมูลที่เหมาะกับข้อมูลขนาดเล็ก เรากำหนดการเรียกใช้
ขั้นตอนวิธีดังนี้ INSERTION-SORT(A) เมื่อ A เป็น array
ข้อมูลเข้า A[1..n]
ข้อมูลออก การจัดเรียงของข้อมูลจำนวน n ตัวใน A โดยที่
A[1] A[2] A[3]
. . . A[n] (sorted in place)
INSERTION-SORT(A)
1. for j = 2 to length[A]
2. (key, i) = (A[j], j-1)
3. while i > 0 and A[i] > key
4. (A[i+1], i) = (A[i], i-1)
5. endwhile
6. A[i+1] = key
7. endfor
ขั้นตอนวิธี Bubble sort
Bubble sort เป็นการเรียงโดยสลับค่าที่อยู่ติดกันให้อยู่ในลำดับที่เรียงกัน
ขั้นตอนวิธีดังนี้ BUBBLE-SORT(A) เมื่อ A เป็น array
ข้อมูลเข้า A[1..n]
ข้อมูลออก การจัดเรียงของข้อมูลจำนวน n ตัวใน A โดยที่
A[1] A[2] A[3]
. . . A[n]
BUBBLE-SORT(A)
1. for i =1 to n-1
2. for j = 1 to n - i
3. if A[j] > A[j+1] then
4. (A[j], A[j+1]) = (A[j+1], A[j])
5. endif
6. endfor
7. endfor
ขั้นตอนวิธี Merge sort
Merge sort เป็นวิธีการจัดเรียงข้อมูลที่ใช้หลักการ divide-and-conquer นั่นคือปัญหาจะถูกแบ่งออกเป็น
ปัญหาย่อยขนาดเล็ก โดยใช้นิยามเวียนเกิดในการแก้ปัญหาย่อยเหล่านี่ ปัญหาหลังจากถูกแบ่งให้มีขนาดเล็กพอเหมาะแล้ว
เราสามารถหาคำตอบได้โดยง่าย เรากำหนดการเรียกใช้ ขั้นตอนวิธีดังนี้ MERGE-SORT(A, p, r) เมื่อ A เป็น array และ p, r เป็นดัชนี
ที่บอกการเรียงใน array A ที่ต้องการทำงาน
ข้อมูลเข้า A[1..n], p, r
ข้อมูลออก การจัดเรียงของข้อมูลใน A โดยที่
A[p] A[p+1] A[p+2]
. . . A[r] (sorted in place)
MERGE-SORT(A, p, r)
1. if p < r
2. then q = floor((p+r)/2)
3. MERGE-SORT(A, p, q)
4. MERGE-SORT(A, q+1, r)
5. MERGE(A, p, q, r)
6. endif
MERGE(A, p, q, r)
1. m = r - p + 1
2. Create Temp[1..m]
3. (i, j, k) = (p, q+1, 1)
4. while(i <= q and j <= r)
5. if A[i] > A[j]
6. (Temp[k], k, j) = (A[j], k+1, j+1)
7. else
8. (Temp[k], k, i) = (A[i], k+1, i+1)
9. end if
10. end while
11. if(j <= r)
12. while(j <= r)
13. (Temp[k], k, j) = (A[j], k+1, j+1)
14. endwhile
15. else
16. while(i <= q)
17. (Temp[k], k, i) = (A[j], k+1, i+1)
18. endwhile
19. endif
20. for i = 1 to m
21. A[i+p-1] = Temp[i]
22. endfor
ขั้นตอนวิธี Heap sort
Heap sort ใช้ขั้นตอนวิธีสามส่วนในการเรียงลำดับข้อมูล ส่วนแรกเป็นส่วนของการสร้าง
Heap ซึ่งเป็น complete binary tree ที่มีคุณสมบติว่าค่าของ parent มีค่ามากกว่าหรือเท่ากับ ค่าของ children โดยที่ children ซ้ายและขวาเป็น Heap มาก่อน
ส่วนที่สองเป็นการสร้าง Heap จากข้อมูลทั้งหมด และส่วนสุดท้ายเป็นการจัดเรียงข้อมูลโดยใช้โครงสร้างของ Heap
ข้อมูลเข้า A[1..n], i
ข้อมูลออก การจัดเรียงของข้อมูลใน A ที่ node i มีคุณสมบัติ heap
HEAPIFY(A, i)
1. L = LEFT(i)
2. R = RIGHT(i)
3. if L <= heap-size[A] and A[L] > A[i]
4. then largest = L
5. else largest = i
6. endif
7. if R <= heap-size[A] and A[R] > A[largest]
8. then largest = R
9. endif
10. if largest != i
11. then exchange A[i] with A[largest]
12. HEAPIFY(A, largest)
13. endif
ข้อมูลเข้า A[1..n]
ข้อมูลออก การจัดเรียงของข้อมูลใน A ที่เป็น HEAP ทั้งหมด
BUILD-HEAP(A)
1. heap-size[A] = length[A]
2. for i = floor(length[A]/2) downto 1
3. HEAPIFY(A, i)
4. endfor
ข้อมูลเข้า A[1..n]
ข้อมูลออก การจัดเรียงของข้อมูลใน A
HEAPSORT(A)
1. BUILD-HEAP(A)
2. for i = length[A] downto 2
3. exchange A[1] with A[i]
4. heap-size[A] = heap-size[A] - 1
5. HEAPIFY(A, 1)
6. endfor
ขั้นตอนวิธี Quick sort
Quick sort ใช้หลักการ divide-and-conquer เหมือนกับ merge sort แต่แทนที่จะใช้
การรวมกันของข้อมูลที่เรียงแล้ว Quick sort ใช้วิธีการสลับที่ของสมาชิกใน array โดยที่สมาชิกในส่วนหน้าต้องน้อยกว่า
หรือเท่ากับสมาชิกในส่วนหลัง A[p...q] <= A[q+1...r]
ข้อมูลเข้า A[1..n], p, r
ข้อมูลออก การจัดเรียงของข้อมูลใน A โดยที่
A[p] A[p+1] A[p+2]
. . . A[r] (sorted in place)
QUICK-SORT(A, p, r)
1. if p < r
2. then q = PARTITION(A, p, r)
3. QUICK-SORT(A, p, q)
4. QUICK-SORT(A, q+1, r)
5. endif
PARTITION(A, p, r)
1. (x, i, j) = (A[p], p-1, r+1)
2. while TRUE
3. do repeat j = j-1
4. until A[j] <= x
5. do repeat i = i+1
6. until A[i] >= x
7. if i < j
8. (A[i], A[j]) = (A[j], A[i])
9. else
10. return j
11. endif
12. endwhile
|