[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-js2go-ep35-sorting-algorithms-in-javascript-and-go-all--*":3,"academy-blog-translations-y7bryg1t410zd6w":95},{"data":4,"page":94,"perPage":94,"totalItems":94,"totalPages":94},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":89,"keywords":90,"locale":64,"published_at":91,"scheduled_at":13,"school_blog":85,"short_description":92,"status":83,"title":6,"updated":93,"updated_by":13,"slug":86,"views":88},"JS2GO EP.35 การทำ Sorting Algorithms ใน JavaScript และ Go","sclblg987654321","school_blog_translations","\u003Cp>การจัดเรียงข้อมูล (Sorting) ถือเป็นหนึ่งในพื้นฐานสำคัญของการพัฒนาโปรแกรม เพราะไม่ว่าจะเป็นการค้นหา (Searching), การจัดอันดับ (Ranking) หรือการประมวลผลข้อมูล (Data Processing) ทุกกระบวนการล้วนต้องอาศัยอัลกอริทึมจัดเรียงที่ดีและเหมาะสมกับบริบทของงาน\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ในบทความนี้ เราจะพาคุณมาศึกษาและเปรียบเทียบการทำงานของอัลกอริทึมจัดเรียงยอดนิยม ได้แก่ Bubble Sort, Merge Sort, Quick Sort รวมถึงการใช้งาน sort package ใน Go พร้อมตัวอย่างโค้ดจริงทั้งใน JavaScript และ Go เพื่อดูว่าภาษาใดจัดเรียงได้เร็วกว่า และอัลกอริทึมใดเหมาะกับระบบของคุณที่สุด 🔍\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>1. Bubble Sort\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>แนวคิด: อัลกอริทึมที่เข้าใจง่ายที่สุด ใช้หลักการ “เปรียบเทียบและสลับตำแหน่ง” ทีละคู่จนกว่าข้อมูลทั้งหมดจะเรียงลำดับสมบูรณ์\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 JavaScript: Bubble Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-javascript\">function bubbleSort(arr) {\n  let n = arr.length;\n  for (let i = 0; i &lt; n - 1; i++) {\n    for (let j = 0; j &lt; n - i - 1; j++) {\n      if (arr[j] &gt; arr[j + 1]) {\n        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];\n      }\n    }\n  }\n  return arr;\n}\n\nconsole.log(bubbleSort([5, 3, 8, 4, 2]));\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ผลลัพธ์:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">[2, 3, 4, 5, 8]\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 Go: Bubble Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport \"fmt\"\n\nfunc bubbleSort(arr []int) []int {\n\tn := len(arr)\n\tfor i := 0; i &lt; n-1; i++ {\n\t\tfor j := 0; j &lt; n-i-1; j++ {\n\t\t\tif arr[j] &gt; arr[j+1] {\n\t\t\t\tarr[j], arr[j+1] = arr[j+1], arr[j]\n\t\t\t}\n\t\t}\n\t}\n\treturn arr\n}\n\nfunc main() {\n\tarr := []int{5, 3, 8, 4, 2}\n\tfmt.Println(bubbleSort(arr))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ผลลัพธ์:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">[2 3 4 5 8]\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>สรุป: Bubble Sort เหมาะสำหรับสอนแนวคิดการเรียงลำดับ (Sorting Concept) แต่ไม่เหมาะกับระบบจริง เพราะมีความซับซ้อน O(n²) และทำงานช้าเมื่อข้อมูลมีจำนวนมาก\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>2. Merge Sort\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>แนวคิด: อัลกอริทึมแบบ “Divide and Conquer” แบ่งข้อมูลออกเป็นสองส่วน, จัดเรียงแต่ละส่วน, แล้วรวมกลับเข้าด้วยกันอย่างมีลำดับ\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 JavaScript: Merge Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-javascript\">function mergeSort(arr) {\n  if (arr.length &lt;= 1) return arr;\n\n  const mid = Math.floor(arr.length \u002F 2);\n  const left = mergeSort(arr.slice(0, mid));\n  const right = mergeSort(arr.slice(mid));\n\n  return merge(left, right);\n}\n\nfunction merge(left, right) {\n  let result = [], i = 0, j = 0;\n  while (i &lt; left.length &amp;&amp; j &lt; right.length) {\n    if (left[i] &lt; right[j]) result.push(left[i++]);\n    else result.push(right[j++]);\n  }\n  return result.concat(left.slice(i)).concat(right.slice(j));\n}\n\nconsole.log(mergeSort([5, 3, 8, 4, 2]));\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 Go: Merge Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport \"fmt\"\n\nfunc mergeSort(arr []int) []int {\n\tif len(arr) &lt;= 1 {\n\t\treturn arr\n\t}\n\tmid := len(arr) \u002F 2\n\tleft := mergeSort(arr[:mid])\n\tright := mergeSort(arr[mid:])\n\treturn merge(left, right)\n}\n\nfunc merge(left, right []int) []int {\n\tresult := []int{}\n\ti, j := 0, 0\n\tfor i &lt; len(left) &amp;&amp; j &lt; len(right) {\n\t\tif left[i] &lt; right[j] {\n\t\t\tresult = append(result, left[i])\n\t\t\ti++\n\t\t} else {\n\t\t\tresult = append(result, right[j])\n\t\t\tj++\n\t\t}\n\t}\n\tresult = append(result, left[i:]...)\n\tresult = append(result, right[j:]...)\n\treturn result\n}\n\nfunc main() {\n\tarr := []int{5, 3, 8, 4, 2}\n\tfmt.Println(mergeSort(arr))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>สรุป: Merge Sort มีความซับซ้อน O(n log n) เหมาะกับการจัดเรียงข้อมูลขนาดใหญ่ เพราะใช้หน่วยความจำเพิ่มเพื่อแบ่งย่อยและรวมผลลัพธ์\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>3. Quick Sort\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>แนวคิด: เป็นอัลกอริทึมแบบ “Divide and Conquer” เช่นเดียวกับ Merge Sort แต่ใช้การเลือก “Pivot” เพื่อแบ่งข้อมูลออกเป็นกลุ่มที่ “น้อยกว่า” และ “มากกว่า” แล้วจัดเรียงแต่ละส่วนแยกกัน\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 JavaScript: Quick Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-javascript\">function quickSort(arr) {\n  if (arr.length &lt;= 1) return arr;\n  const pivot = arr[arr.length - 1];\n  const left = arr.filter(x =&gt; x &lt; pivot);\n  const right = arr.filter(x =&gt; x &gt; pivot);\n  return [...quickSort(left), pivot, ...quickSort(right)];\n}\n\nconsole.log(quickSort([5, 3, 8, 4, 2]));\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>🔹 Go: Quick Sort\u003C\u002Fh3>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport \"fmt\"\n\nfunc quickSort(arr []int) []int {\n\tif len(arr) &lt;= 1 {\n\t\treturn arr\n\t}\n\tpivot := arr[len(arr)-1]\n\tleft, right := []int{}, []int{}\n\tfor _, v := range arr[:len(arr)-1] {\n\t\tif v &lt; pivot {\n\t\t\tleft = append(left, v)\n\t\t} else {\n\t\t\tright = append(right, v)\n\t\t}\n\t}\n\tleft = quickSort(left)\n\tright = quickSort(right)\n\treturn append(append(left, pivot), right...)\n}\n\nfunc main() {\n\tarr := []int{5, 3, 8, 4, 2}\n\tfmt.Println(quickSort(arr))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>สรุป: Quick Sort โดยทั่วไปทำงานเร็วกว่า Merge Sort ในกรณีทั่วไป (O(n log n)) แต่มี Worst Case ที่อาจช้าถึง O(n²) หากเลือก Pivot ไม่เหมาะสม\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>4. การใช้ sort Package ใน Go\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ภาษา Go มี package มาตรฐาน \u003Ccode inline=\"\">sort\u003C\u002Fcode> ที่ช่วยให้สามารถจัดเรียงข้อมูลได้รวดเร็วโดยไม่ต้องเขียนอัลกอริทึมเอง\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\nfunc main() {\n\tnums := []int{5, 3, 8, 4, 2}\n\tsort.Ints(nums)\n\tfmt.Println(nums)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ผลลัพธ์:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">[2 3 4 5 8]\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ข้อดี:\u003Cbr>✅ ความเร็วสูง (optimized O(n log n))\u003Cbr>✅ ใช้งานง่าย เหมาะกับระบบ Production\u003Cbr>✅ รองรับ \u003Ccode inline=\"\">sort.Strings\u003C\u002Fcode>, \u003Ccode inline=\"\">sort.Slice\u003C\u002Fcode>, \u003Ccode inline=\"\">sort.Float64s\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>5. สรุปเปรียบเทียบอัลกอริทึม\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cfigure class=\"table\">\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Algorithm\u003C\u002Fth>\u003Cth>ความซับซ้อน (Average)\u003C\u002Fth>\u003Cth>ความเร็ว\u003C\u002Fth>\u003Cth>เหมาะสำหรับ\u003C\u002Fth>\u003Cth>ภาษาแนะนำ\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Bubble Sort\u003C\u002Ftd>\u003Ctd>O(n²)\u003C\u002Ftd>\u003Ctd>ช้า\u003C\u002Ftd>\u003Ctd>การสอนพื้นฐาน\u003C\u002Ftd>\u003Ctd>JS \u002F Go\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Merge Sort\u003C\u002Ftd>\u003Ctd>O(n log n)\u003C\u002Ftd>\u003Ctd>เร็ว\u003C\u002Ftd>\u003Ctd>ข้อมูลขนาดใหญ่\u003C\u002Ftd>\u003Ctd>ทั้งคู่\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Quick Sort\u003C\u002Ftd>\u003Ctd>O(n log n)\u003C\u002Ftd>\u003Ctd>เร็วมาก\u003C\u002Ftd>\u003Ctd>ใช้งานทั่วไป\u003C\u002Ftd>\u003Ctd>ทั้งคู่\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Go sort Package\u003C\u002Ftd>\u003Ctd>O(n log n)\u003C\u002Ftd>\u003Ctd>สูงสุด\u003C\u002Ftd>\u003Ctd>ระบบ Production\u003C\u002Ftd>\u003Ctd>Go\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\u003Cp>&nbsp;\u003C\u002Fp>\u003Chr>\u003Ch2>สรุปและคำแนะนำ\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cul>\u003Cli>💡 JavaScript เหมาะกับการทดลองอัลกอริทึมและการใช้งานฝั่ง Frontend\u003C\u002Fli>\u003Cli>⚙️ Go เหมาะกับระบบ Production-Level ที่ต้องการความเร็วสูง เช่น API, Backend Processing หรือ Data Pipelines\u003C\u002Fli>\u003Cli>🧠 ใช้ \u003Ccode inline=\"\">sort\u003C\u002Fcode> package ใน Go เพื่อให้ได้ performance สูงสุด\u003C\u002Fli>\u003Cli>🚀 หากคุณอยู่ฝั่ง JavaScript ให้เลือกใช้ Quick Sort หรือ Merge Sort สำหรับการจัดเรียงข้อมูลจำนวนมาก\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>ตอนต่อไป\u003C\u002Fh2>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>ใน EP.36 ของซีรีส์ JS2GO เราจะพาคุณไปเรียนรู้หัวข้อ “การทำ Searching Algorithms ใน Go และ JavaScript” เพื่อเข้าใจเทคนิคการค้นหาข้อมูลอย่างมีประสิทธิภาพ เช่น Linear Search, Binary Search, และ Map-based Lookup พร้อมแนวทางการเลือกใช้ให้เหมาะกับระบบจริง 🔍\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>\u003Cstrong>อ่านบทความ Series อื่นๆ\u003C\u002Fstrong>\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FGolang\">\u003Cstrong>Golang The Series\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FJS2GO\">\u003Cstrong>JS2GO\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdev.school\u002Fblogs\u002Fcategories\u002FTailwind%20CSS\">\u003Cstrong>10 Ep ที่จะให้คุณเป็นมือโปร Tailwind CSS ในชั่วข้ามคืน\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">\u003Cstrong>https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🔴 YouTube : \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUC2eI2RxcA2zbTqZyHyWIfRg\">\u003Cstrong>Superdev Academy\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevschool\u002F\">\u003Cstrong>Superdev Academy\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">\u003Cstrong>https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002F\">\u003Cstrong>https:\u002F\u002Fwww.superdevacademy.com\u002F\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>","69_11zon_689d6syhf9.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Ff2u2doeg3r1toxm\u002F69_11zon_689d6syhf9.webp","2026-03-04 08:45:40.590Z","",{"keywords":15,"locale":58,"school_blog":68},[16,23,28,33,38,43,48,53],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:45:39.965Z","b9c614ysjg0x349","Sorting","2026-04-10 16:13:01.402Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:35:05.133Z","ydn3q6brn8wh2st","Algorithm","2026-04-10 16:12:36.773Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:45:39.715Z","fjjhdcqsies69y2","Bubble Sort","2026-04-10 16:13:01.240Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:45:39.321Z","jb1nbj4tkoyx89d","Merge Sort","2026-04-10 16:13:01.148Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:45:39.089Z","4p14lr9icx6fqm2","Quick Sort","2026-04-10 16:13:01.066Z",{"collectionId":17,"collectionName":18,"created":44,"created_by":13,"id":45,"name":46,"updated":47,"updated_by":13},"2026-03-04 08:20:42.484Z","vslzz9nvv6n77cx","JavaScript","2026-04-10 16:07:28.339Z",{"collectionId":17,"collectionName":18,"created":49,"created_by":13,"id":50,"name":51,"updated":52,"updated_by":13},"2026-03-04 08:20:11.547Z","ey3puyme01a9bsw","Go","2026-04-10 16:07:25.893Z",{"collectionId":17,"collectionName":18,"created":54,"created_by":13,"id":55,"name":56,"updated":57,"updated_by":13},"2026-03-04 08:45:30.765Z","nayuhpre9emd5xw","JS2GO","2026-04-10 16:12:59.160Z",{"code":59,"collectionId":60,"collectionName":61,"created":62,"flag":63,"id":64,"is_default":65,"label":66,"updated":67},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":69,"collectionId":70,"collectionName":71,"created":13,"expand":72,"id":85,"slug":86,"updated":87,"views":88},"hsa1afr8fcnd6qb","pbc_2105096300","school_blogs",{"category":73},{"blogIds":74,"collectionId":75,"collectionName":76,"created":77,"created_by":13,"id":69,"image":78,"image_alt":13,"image_path":79,"label":80,"name":56,"priority":81,"publish_at":82,"scheduled_at":13,"status":83,"updated":84,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:24:37.986Z","js2_go_2_11zon_y6paxmuz32.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fhsa1afr8fcnd6qb\u002Fjs2_go_2_11zon_y6paxmuz32.webp",{"en":56,"th":56},10,"2025-08-11 03:41:08.820Z","published","2026-04-25 02:32:14.339Z","y7bryg1t410zd6w","js2go-ep35-sorting-algorithms-in-javascript-and-go","2026-05-09 19:22:09.245Z",217,"f2u2doeg3r1toxm",[20,25,30,35,40,45,50,55],"2025-11-03 01:47:58.354Z","เรียนรู้และเปรียบเทียบการทำงานของอัลกอริทึมจัดเรียงยอดนิยมอย่าง Bubble Sort, Merge Sort, Quick Sort และการใช้ sort package ใน Go พร้อมตัวอย่างโค้ดจริงทั้งสองภาษา เพื่อเข้าใจหลักการจัดเรียงข้อมูลและเลือกใช้อย่างเหมาะสมในระบบของคุณ","2026-04-25 02:47:55.718Z",1,{"th":86,"en":86}]