Assignment 01: CÁC GIẢI THUẬT SẮP XẾP Nhóm 09: Phùng Anh Vũ – 2254810217 Lê Ngọc Tú Uyên -2254810205 Dương Huỳnh Minh Thông – 2254810239 BÀI 01: *Mảng thứ nhất : 12 4 44 11 30 5 1a) Insertion sort B01: current=1,walker=0,hold =4 4<12: swap(4,12) 4 12 44 11 30 5 4 12 44 11 30 5 4 12 11 44 30 B02: c =2,w=1,h=44 44>12: no swap B03: c=3,w=2,h=11 11<44: swap(11,44) 5 c=3,w=1,h=11 11<12: swap(11,12) 4 11 12 44 30 11 12 44 30 5 c=3,w=0,h=11 11>4: no swap B04: c=4,w=3,h=30 4 5 30<44: swap(30,44) 4 11 12 30 44 5 c=4,w=2,h=30 30>12: no swap 4 11 12 30 44 5 4 11 12 30 5 44 4 11 12 5 30 44 4 11 5 12 30 44 4 5 11 12 30 44 4 5 11 12 30 44 B05: c=5,w=4,h=5 5<44: swap(5,44) c=5,w=3,h=5 5<30: swap(5,30) c=5,w=2,h=5 5<12: swap(5,12) c=5,w=1,h=5 5<11: swap(5,11) c=5,w=0,h=5 5>4: no swap End Insertionsort 1b) Selection sort B01: current=0,walker=1,smallest=12 w=1->5: min=4 4<12: exchance(12,4) 4 12 44 11 30 5 4 5 44 11 30 12 B02: c=1,w=2,smallest=12 w=2->5: min =5 5<12: exchance(12,5) B03: c=2,w=3,smallest=44 w=3->5: min=11 11<44: exchance (44,11) 4 5 11 44 30 12 4 5 11 12 30 44 5 11 12 30 44 5 11 12 30 44 B04: c=3,w=4,smallest=44 w=4->5: min=12 12<44 exchance (44,12) B05 : c=4,w=5,smallest=30 w=5: min=30 No exchance 4 B06: c=5 smallest =44 No exchance 4 END Selectionsort 12 4 44 11 30 5 1c) Buble sort Pass01: c=0,w=5 5<30: swap(30,5)->s=F 12 4 44 11 5 30 c=0,w=4 5<11:swap(11,5)->s=F 12 4 44 5 11 30 c=0,w=3 5<44:swap(44,5)->s=F 12 4 5 44 11 30 c=0,w=2 5>4:no swap->s=T 12 4 5 44 11 30 c=0,w=1 4<12:swap(12,4)->s=F 4 12 5 44 11 30 c=0,w=0,s=F Pass02: c=1,w=5 30>11:no swap->s=T 4 12 5 44 11 30 c=1,w=4 11<44:swap(44,11)>s=F 4 12 5 11 44 30 c=1,w=3 11>5:no swap->s=T 4 12 5 11 44 30 c=1,w=2 5<12:swap(12,5)->s=F 4 5 12 11 44 30 c=1,w=1,s=F Pass05: c=4,w=5 no swap c=4,w=4,s=T 4 5 11 12 30 44 Pass06: c=5,w=5,s=T no swap 4 5 11 12 30 44 Pass03: c=2,w=5 30<44:swap(44,30)>s=F 4 5 12 11 30 44 c=2,w=4 30>11:no swap->s=T 4 5 12 11 30 44 c=2,w=3 11<12:swap(12,11)>s=F 4 5 11 12 30 44 c=2,w=2,s=F End Bublesort. 1d) Mergesort 0 1 2 3 4 5 12 4 44 11 30 5 Left Mid Right Pass04: c=3,w=5 no swap c=3,w=4 no swap c=3,w=3,s=T 4 5 11 12 30 44 B01: MergeSort(a,0,5) //Chia mảng thành hai mảng Con 0<5 Mid =(0+5)/2=2 B02: mergeSort(a,0,2) // Sắp xếp mảng con thứ nhất 0<2 Mid=(0+2)/2=1 : 12 4 44 mergeSort(a,0,1) 0<1 Mid=(0+1)/2=0 12 : mergeSort(a,0,0) 0=0 Return : 12 mergeSort(a,1,1) 1=1 Return : merge(a,0,0,1) 4 4 12 mergeSort(a,2,2) 44 2=2 Return : merge(a,0,1,2) 4 12 44 4 B03: mergeSort(a,3,5) //Sắp xếp mảng con thứ 2 3<5 Mid=(3+5)/2 =4 : 11 30 11 30 5 mergeSort(a,3,4) 3<4 Mid=(3+4)/2=3 : mergeSort(a,3,3) 11 3=3 Return : mergeSort(a,4,4) 30 4=4 Return : merge(a,3,3,4) 11 30 mergeSort(a,5,5) 5=5 Return merge(a,3,4,5) 5 5 11 30 B04: merge(a,0,3,5) // Hợp hai mảng con lại ta có được chuỗi cha đã được sắp xếp 4 5 11 12 30 44 *Mảng thứ hai : 08 41 03 01 09 15 09 15 1a) INSERTION SORT B01: current=1, walked=0, hold=41 41>08: noswap 08 41 03 01 B02: current=2, walked=1, hold=3 3<41: swap(3,41) 08 03 41 01 09 15 01 09 15 41 09 15 41 09 15 41 09 15 09 41 15 current=2, walked=0, hold=3 3<8: swap(3,8) 03 08 41 B03: current=3, walked=2, hold=1 1<41: swap(1,41) 03 08 01 current=3, walked=1, hold=1 1<8: swap(1,8) 03 01 08 current=3, walked=0, hold=1 1<3: swap(1,3) 01 03 08 B04: current=4, walked=3, hold=9 9<41: swap(9,41) 01 03 08 current=4, walked=2, hold=9 9>8: noswap 01 03 08 09 41 15 09 41 15 09 41 15 15 41 15 41 15 41 15 41 15 41 current=4, walked=1, hold=9 9>3: noswap 01 03 08 current=4, walked=0, hold=9 9>1: noswap 01 03 08 B05: current=5, waldked=4, hold=15 15<41: swap(15,41) 01 03 08 09 current=5, waldked=3, hold=15 15>9: noswap 01 03 08 09 current=5, waldked=2, hold=15 15>8: noswap 01 03 08 09 current=5, waldked=1, hold=15 15>3: noswap 01 03 08 09 current=5, waldked=0, hold=15 15>1: noswap 01 03 08 End Insertion Sort 1b)SELECTION SORT 09 B01: current=0, walked=1, smallest=8 walked=1 -> 5: min= 1 1<8: swap(1,8) 01 41 03 08 09 15 09 15 09 15 41 15 41 15 B02: current=1, walked=2, smallest=3 walked=2 -> 5: min= 8 3<8: no swap 01 03 41 08 B03: current=2, walked=3, smallest=41 walked=3 -> 5: min= 8 8<41: swap(8,41) 01 03 08 41 B04: current=3, walked=4, smallest=41 walked=3 -> 5: min= 9 9<41: swap(9,41) 01 03 08 09 B05: current=4, walked=4, smallest=41 walked=3 -> 5: min= 15 15<41: swap(15,41) 01 03 08 09 End Selection Sort BUBBLE SORT Pass 01: c=0, w=5, s=T, no swap 0 4 0 0 8 41 3 1 9 c=0, w=4, s=T, no swap 0 4 0 0 8 41 3 1 9 c=0, w=3, 3>1: swap(3,1) -> s=F 0 4 0 0 8 41 1 3 9 c=0, w=2, 41>1: swap(41,1) -> s=F 0 0 4 0 8 1 41 3 9 c=0, w=1, 8>1: swap(8,1) -> s=F 0 0 4 0 1 8 41 3 9 c=0, w=0, s=F 0 15 0 15 0 15 0 15 0 15 Pass 04: c=3, w=5, 41>15: swap(15,41) -> s=F 0 0 0 0 1 1 3 8 9 15 41 c=3, w=4, s=T, no swap 0 0 0 0 1 1 3 8 9 15 41 c=3, w=3,=T 1d) Mergesort Pass 02: c=1, w=5, s=T, no swap 1 0 0 4 0 1 8 41 3 9 c=1, w=4, s=T, no swap 1 0 0 4 0 1 8 41 3 9 c=1, w=3, 41>3: swap(3,41) -> s=F 1 0 0 0 4 1 8 3 41 9 c=1, w=2, 8>3: swap(3,8) -> s=F 1 0 0 0 4 1 3 8 41 9 c=1, w=1, s=F 0 15 0 15 0 15 0 15 1 1 Pass 05: c=4, w=5, s=T, no swap 0 0 0 0 4 1 3 8 9 15 c=4, w=4, s=T, no swap 1 41 4 0 1 2 3 4 5 8 41 3 1 9 15 Left Pass 03: c=2, w=5, s=T, no swap 1 0 0 0 4 0 1 3 8 41 9 15 c=2, w=4, 141>9: swap(9,41) -> s=F 0 0 0 0 4 1 3 8 9 41 15 c=2, w=3, s=T, no swap 1 0 0 0 0 4 1 3 8 9 41 15 c=2, w=2, s=F Mid Right Pass 06: c=5, w=5, s=T, no swap 4end BubleSort 1 1 1 B01: MergeSort(a,0,5) //Chia mảng thành hai mảng Con 0<5 Mid =(0+5)/2=2 B02: mergeSort(a,0,2) // Sắp xếp mảng con thứ nhất 0<2 Mid=(0+2)/2=1 : 8 41 3 mergeSort(a,0,1) 0<1 Mid=(0+1)/2=0 8 : 41 mergeSort(a,0,0) 0=0 Return : 8 mergeSort(a,1,1) 1=1 Return : merge(a,0,0,1) 41 8 41 mergeSort(a,2,2) 3 2=2 Return : merge(a,0,1,2) 3 8 41 B03: mergeSort(a,3,5) //Sắp xếp mảng con thứ 2 3<5 Mid=(3+5)/2 =4 : mergeSort(a,3,4) 1 9 15 3<4 Mid=(3+4)/2=3 : 1 9 mergeSort(a,3,3) 1 3=3 Return : mergeSort(a,4,4) 9 4=4 Return : merge(a,3,3,4) 1 9 mergeSort(a,5,5) 5=5 Return merge(a,3,4,5) 15 1 9 15 B04: merge(a,0,3,5) // Hợp hai mảng con lại ta có được chuỗi cha đã được sắp xếp 1 3 8 9 15 41 *Mảng thứ ba: 07 02 01 18 10 04 18 10 04 B01: C=1 ,W =0,hold=02 02<07,ex(02,07) 02 07 01 B02: C=2 ,W=1 ,hold=01 01<07 ,ex(01,07) 02 01 07 18 10 04 07 18 10 04 18 10 04 18 10 04 18 10 04 10 18 04 C=2 ,W=0,hold=01 01<02,ex(01,02) 01 02 B03 C=3 ,W=2 ,hold=18 18>07 , no ex 01 02 07 C=3 ,W=1 ,hold=18 18>02 , no ex 01 02 07 C=3 ,W=2 ,hold=18 18>01 , no ex 01 02 07 B04 C=4 ,W=3 ,hold=10 10<18 ,ex(10,18) 01 02 07 C=4 ,W=2 ,hold=10 10>07 ,no ex 01 02 07 10 18 04 10 18 04 10 18 04 10 04 18 04 10 18 07 10 18 C=4 ,W=1 ,hold=10 10>02 ,no ex 01 02 07 C=4 ,W=0 ,hold=10 10>01 ,no ex 01 02 07 B05: C=5 ,W=4 ,hold=04 04<18 ,ex(04,18) 01 02 07 C=5 ,W=3 ,hold=04 04<10 ,ex(04,10) 01 02 07 C=5 ,W=2 ,hold=04 04<07 ,ex(04,07) 01 02 04 C=5 ,W=1 ,hold=04 04>02 ,no ex 01 02 04 07 10 18 07 10 18 18 10 04 18 10 04 C=5 ,W=1 ,hold=04 04>01 ,no ex 01 02 04 End Insertion sort 1b) Selection sort B01: C=0 ,W=1 ,Smallest=07 W=1->5 ,Min=01 01<07 ,ex(01,07) 01 02 07 B02: C=1 ,W=2 ,Smallest=02 W=2->5 ,Min=04 04>02 ,no ex 01 02 07 B03 C=2 ,W=3 ,Smallest=07 W=3->5 ,Min=04 04<07 ,ex(04,07) 01 02 04 18 10 07 07 10 18 04 07 10 18 04 07 10 18 B04 C=3 ,W=4 ,Smallest=18 W=4->5 ,Min=07 07<18 ,ex(07,18) 01 02 04 B05 C=4 ,W=5 ,Smallest=10 W=5 ,Min=18 18>10, no ex 01 02 B06 : C=5 ,Smallest=18 No ex 01 02 End SelectionSort 1c) Bubble sort Pass 1 C=0 ,W=5 04<10 ,Sort=F ,ex(04,10) 7 0 2 0 1 0 8 1 4 Pass2 C=1 ,W=5 10<18 ,Sort=F ,ex(10,18) 0 0 C=0 ,W=4 04<18 ,Sort=F ,ex(04,18) 7 0 2 0 1 0 4 0 8 1 1 1 0 0 2 0 4 0 4 0 0 1 8 C=2 ,W=3 04<07,Sort=F,ex(04,07) 1 C=1,W=2 02<07,Sort=F,ex(02,07) 0 8 1 C=2 ,W=4 10>4,Sort=T,no ex 1 C=1 ,W=3 04>02 ,Sort=T,no ex C=0 ,W=2 01<02 ,Sort=F , ex(01,02) 0 1 0 2 C=1 ,W=4 10>04 ,Sort=T ,no ex C=0 ,W=3 04>01 ,Sort=T,no ex 7 0 7 Pass3 C=2,W=5 18>10,Sort =T,no ex 1 0 2 1 0 1 C=1,W=1 Sort=F, no ex 1 0 1 0 7 0 4 0 2 0 4 0 7 0 0 1 8 1 0 0 1 8 1 C=2,W=2,Sort=F,no ex 0 0 1 8 1 C=0 ,W=1 01<07 ,Sort=F ,ex(01,07) 1 0 7 0 2 0 4 0 8 C=0,W=0,Sort=f Pass4 C=3,W=5 18>10,Sort=T,no ex Pass5 C=4,W=5 18>10,Sort=T,no ex C=3,W=4 10>07,Sort=T,no ex C=4,W=4 Sort=F,no ex C=3,W=3 04>02,Sort=T,no ex Pass6 C=5,W=5 Sort=T,no ex 1 0 2 0 4 0 7 End BubbleSort 1d) Merge sort 1d) Mergesort 0 1 2 3 4 5 7 2 1 18 10 4 Left B01: MergeSort(a,0,5) Mid Right //Chia mảng thành hai mảng Con 0<5 Mid =(0+5)/2=2 B02: mergeSort(a,0,2) // Sắp xếp mảng con thứ nhất 0<2 Mid=(0+2)/2=1 : 7 2 1 mergeSort(a,0,1) 0<1 Mid=(0+1)/2=0 7 : 2 mergeSort(a,0,0) 0=0 Return : 7 mergeSort(a,1,1) 1=1 Return : merge(a,0,0,1) 2 7 2 mergeSort(a,2,2) 1 2=2 Return : merge(a,0,1,2) 1 2 7 B03: mergeSort(a,3,5) //Sắp xếp mảng con thứ 2 3<5 Mid=(3+5)/2 =4 : 18 10 4 mergeSort(a,3,4) 18 3<4 Mid=(3+4)/2=3 : 10 mergeSort(a,3,3) 18 3=3 Return : mergeSort(a,4,4) 10 4=4 Return : merge(a,3,3,4) 10 18 mergeSort(a,5,5) 5=5 Return merge(a,3,4,5) 4 4 10 18 B04: merge(a,0,3,5) // Hợp hai mảng con lại ta có được chuỗi cha đã được sắp xếp 1 2 4 7 10 18 *Mảng thứ tư: 19 16 64 06 05 22 64 06 05 22 1a)Insertionsort B01: C=1,W=0,hold=16 16<19,swap(16,19) 16 19 B02: C=2,W=1,hold=64 64>19,no swap C=2,W=0,hold=64 19>16,noswap B03: C=3,W=2,hold=06 06<64,swap(06,64) 16 19 06 64 05 22 19 64 05 22 19 64 05 22 19 05 64 22 C=3,W=1,hold=06 06<19,swap(06,19 16 06 C=3,W=1,hold=06 06<16,swap(06,16) 06 16 B04: C=4,W=3,hold=05 05<64,swap(05,64) 06 16 C=4,W=2,hold=05 05<10,swap(05,19) 06 16 05 19 64 22 16 19 64 22 16 19 64 22 16 19 22 64 C=4,W=1,hold=05 05<16,swap(05,16) 06 05 C=4,W=0,hold=05 05<06,swap(05,06) 05 06 B05: C=5,W=4,hold=22 22<64,swap(22,64) 05 06 C=5,W=3,hold=22 no swap C=5,W=2,hold=22 no swap C=5,W=1,hold=22 no swap C=5,W=0,hold=22 no swap 05 06 16 19 22 64 End Insertionsort 1b) Selectionsort B01: current=0, walked=1, smallest=19 walked=1->5: min=5 5<19: swap(5,19) 05 16 64 06 19 22 19 22 19 22 B02: current=1, walked=2, smallest=16 walked=1->5: min=6 6<19: swap(6,16) 05 06 64 16 B03: current=2, walked=3, smallest=64 walked=1->5: min=16 16<64: swap(16,64) 05 B04: 06 16 64 current=3, walked=3, smallest=64 walked=1->5: min=19 19<64: swap(19,64) 05 06 16 19 64 22 22 64 B05: current=4, walked=5, smallest=64 walked=1->5: min=22 22<64: swap(22,64) 05 06 End SelectionSort 16 19 1c) Bubble sort Pass 01: c=0, w=5, s=T, no swap 1 1 6 0 19 16 64 6 5 c=0, w=4, 6>5: swap(5,6) -> s=F 1 1 6 0 19 16 64 5 6 c=0, w=3, 64>5: swap(5,64) -> s=F 1 1 0 6 19 16 5 64 6 c=0, w=2, 16>5: swap(5,16) -> s=F 1 0 1 6 19 5 16 64 6 c=0, w=1, 19>5: swap(5,19) -> s=F 0 1 1 6 5 19 16 64 6 c=0, w=0, s=F Pass 04: c=3, w=5, s=T, no swap 0 0 1 1 5 6 16 19 22 c=3, w=4, s=T, no swap 0 0 1 1 5 6 16 19 22 c=3, w=3, s=T 0 22 0 22 0 22 0 22 0 22 2 64 2 64 Pass 02: c=1, w=5, s=T, no swap 2 0 1 1 6 0 5 19 16 64 6 22 c=1, w=4 64>6: swap(6,64) -> s=F 2 0 1 1 0 6 5 19 16 6 64 22 c=1, w=3 16>06: swap(6,16) -> s=F 2 0 1 0 1 6 5 19 6 16 64 22 c=1, w=2 19>06: swap(6,19) -> s=F 2 0 0 1 1 6 5 6 19 16 64 22 c=1, w=1, s=F Pass 05: c=4, w=5, s=T, no swap 6 0 0 1 1 5 6 16 19 22 c=4, w=4, s=T 2 64 6 0 1 2 3 4 5 19 16 64 6 5 22 Left B01: MergeSort(a,0,5) 2c=2, w=4, s=T, no swap 0 0 1 1 2 5 6 19 16 22 64 c=2, w=3 219>16: swap(16,19) -> s=F 0 0 1 1 2 5 6 16 19 22 64 2c=2, w=3, s=T, no swap 0 0 1 1 5 6 16 19 22 c=2, w=2, s=F 2 1d) Merge sort 1d) Mergesort Pass 03: c=2, w=5 264>22: swap(22,64) -> s=F 0 0 1 1 2 5 6 19 16 22 64 Mid Right //Chia mảng thành hai mảng Con Pass 06: c=5, w=5, s=T, no swap 6 End BubbleSort 2 64 6 6 6 6 0<5 Mid =(0+5)/2=2 B02: mergeSort(a,0,2) // Sắp xếp mảng con thứ nhất 0<2 Mid=(0+2)/2=1 : 19 16 64 mergeSort(a,0,1) 0<1 Mid=(0+1)/2=0 19 : 16 mergeSort(a,0,0) 0=0 Return : 19 mergeSort(a,1,1) 1=1 Return : merge(a,0,0,1) 16 16 19 mergeSort(a,2,2) 64 2=2 Return : merge(a,0,1,2) 16 19 64 B03: mergeSort(a,3,5) //Sắp xếp mảng con thứ 2 3<5 Mid=(3+5)/2 =4 : 6 5 22 mergeSort(a,3,4) 3<4 Mid=(3+4)/2=3 : mergeSort(a,3,3) 3=3 Return : 6 6 5 mergeSort(a,4,4) 4=4 Return : merge(a,3,3,4) 5 5 6 mergeSort(a,5,5) 5=5 Return merge(a,3,4,5) 22 5 6 22 B04: merge(a,0,3,5) // Hợp hai mảng con lại ta có được chuỗi cha đã được sắp xếp 5 6 16 19 22 64 BÀI 2: 1.Insertion Sort: Ưu điểm: Đơn giản để hiểu và cài đặt Hiệu suất tốt với các mảng nhỏ hoặc gần như đã được sắp xếp. Có thể sắp xếp trong chỗ (in-place) và không cần bộ nhớ phụ. Khuyết điểm: Hiệu suất kém với các mảng lớn với số lượng phần tử lớn. Có độ phức tạp trung bình là O(n^2). 2.Selection Sort: Ưu điểm: Đơn giản để hiểu và cài đặt. Hiệu suất tốt với các mảng nhỏ hoặc gần như đã được sắp xếp. Có thể sắp xếp trong chỗ (in-place) và không cần bộ nhớ phụ. Khuyết điểm: Hiệu suất kém với các mảng lớn với số lượng phần tử lớn. Có độ phức tạp trung bình là O(n^2). 3.Bubble Sort: Ưu điểm: Đơn giản để hiểu và cài đặt. Dễ dàng sắp xếp các dãy gần như đã được sắp xếp. Khuyết điểm: Hiệu suất kém với các mảng lớn với số lượng phần tử lớn. Có độ phức tạp trung bình là O(n^2). Không hiệu quả với các tập dữ liệu lớn và phức tạp. 4.Merge Sort: Ưu điểm: Hiệu suất tốt với các mảng lớn với số lượng phần tử lớn. Độ phức tạp trung bình là O(n log n), hiệu quả hơn các thuật toán trên. Đảm bảo sắp xếp ổn định. Khuyết điểm: Yêu cầu bộ nhớ phụ để lưu trữ các mảng con. Cài đặt phức tạp hơn so với các thuật toán trên. Tóm lại, Insertion Sort, Selection Sort và Bubble Sort đơn giản và dễ hiểu, nhưng hiệu suất của chúng kém hơn với các mảng lớn. Trong khi đó, Merge Sort có hiệu suất tốt hơn với các mảng lớn nhưng yêu cầu bộ nhớ phụ và cài đặt phức tạp hơn. BÀI 3: