โปรแกรมการเรียงลำดับคำไทย (Thai Sorting)
การเรียงลำดับข้อมูลเป็นการจัดระเบียบให้แก่ข้อมูล เพื่อความสะดวกในการค้นหา โดยมีลำดับของข้อมูลที่ตายตัว การกำหนดลำดับดังกล่าวทำได้โดยกำหนดความสัมพันธ์ของข้อมูล ๒ ค่าใดๆ เพื่อพิจารณาลำดับก่อนหลัง ความสัมพันธ์ดังกล่าวต้องมีคุณสมบัติถ่ายทอดได้ (transitive) กล่าวคือ ถ้า a ถูกกำหนดให้มาก่อน b และให้ b มาก่อน c แล้ว จะต้องได้ว่า a มาก่อน c ด้วย ในการเรียงลำดับตัวเลขความสัมพันธ์ดังกล่าว แทนได้ด้วยเครื่องหมายน้อยกว่า (<) นั่นเอง ส่วนการเรียงลำดับสายอักขระนั้น จะต้องสร้างฟังก์ชันสำหรับเปรียบเทียบสายอักขระ เพื่อใช้ในกระบวนวิธีเรียงลำดับต่อไป
การเรียงลำดับสายอักขระในภาษาต่างๆ สามารถทำได้หลายแบบ เช่น การเรียงตามการออกเสียง ซึ่งเห็นได้ในภาษาญี่ปุ่น การเรียงตามรูปอักษร ดังตัวอย่างในภาษาอังกฤษ หรือการเรียงตามรูปอักษร ผสมกับการออกเสียง ดังที่ปรากฏในพจนานุกรมไทยบางเล่ม
การเรียงลำดับช่วยให้การค้นหาทำได้ง่ายขึ้น ไม่ว่าจะเป็นการค้นโดยคอมพิวเตอร์ หรือค้นโดยผู้ใช้ก็ตาม ตัวอย่างที่เห็นได้อย่างชัดเจนคือ การค้นหาคำในพจนานุกรม หรือการค้นหาฐานข้อมูลชื่อต่างๆ เช่น ชื่อบุคคล ชื่อหน่วยงาน หรือชื่อแฟ้มเอกสาร เป็นต้น ถ้าได้จัดเรียงไว้ตามลำดับแล้ว ก็สามารถประหยัดเวลาในการค้นหาได้
ตัวอย่าง ชื่อบุคคล
อนันต์ สมชาย กนกวรรณ ธเนศ ธนากร สมศรี จันทนา อดิศักดิ์ กอบกุล สมศักดิ์ ระพี จักรกฤษณ์ รัตนา
หลังจากเรียงลำดับแล้ว ทำให้ค้นหาไง่ายขึ้น ดังนี้
กนกวรรณ กอบกุล จักรกฤษณ์ จันทนา ธนากร ธเนศ ระพี รัจนา สมชาย สมศรี สมศักดิ์ อดิศักดิ์ อนันต์
การเรียงอักขระไทยโดยทั่วไปจะเรียงตามวิธีที่กำหนดไว้ในพจนานุกรม ฉบับราชบัณฑิตยสถาน ซึ่งเป็นการเรียงตามรูป ข้อกำหนดในการเรียงลำดับก็คือ
๑. ลำดับของพยัญชนะ และตัว ฤ ฤา ฦ ฦา เรียงไว้ตามรูป ไม่ใช่ตามเสียง (ตัวอย่างเช่น หนา อยู่หมวด ห ไม่ใช่หมวด น โดยมีลำดับดังนี้
ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ
ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท
ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร
ฤ ฤา ล ฦา ว ศ ษ ส ห ฬ
อ ฮ
๒. ลำดับของสระเรียงไว้ตามรูป ไม่ใช่ตามเสียง (ตัวอย่างเช่น รัว อยู่ในหมวดไม้หันอากาศ ไม่ใช่หมวดสระ อัว สังเกตว่า คำดังกล่าวไม่ได้อยู่ใกล้กับคำว่า รวม ซึ่งมีเสียง อัว เหมือนกัน) โดยมีลำดับ ดังนี้
อะ อั อา อำ อิ อี อึ อื อุ อู เอ
แอ โอ ใอ ไอ
๓. พยัญชนะถือว่ามาก่อนสระเสมอ เช่น กก มาก่อน กะ และ จริง มาก่อน จะ
๔. ไม่มีการเรียงลำดับตามวรรณยุกต์ เช่น ไต้ก๋ง ไต้ฝุ่น ไต่ไม้ เรียงลำดับเหมือนเป็นคำว่า ไตก๋ง ไตฝุน ไตไม เว้นแต่ในกรณีที่ตัวสะกด และการันต์เหมือนกัน เช่น ไต ไต่ ไต้ ไต๋ หรือกระตุ่น กระตุ้น คำที่มีไม้ไต่คู้จะมาก่อนวรรณยุกต์ เช่น เก็ง เก่ง เก้ง เก๋ง

รหัสภาษาไทยตาม มอก. ๖๒๐-๒๕๓๓ หรือที่เรียกกันว่า รหัส สมอ. นั้น ได้จัดตัวอักขระให้เรียงอย่างถูกต้องตามข้อ ๑-๓ ข้างต้น จึงเอื้ออำนวยต่อการเรียงลำดับสายอักขระภาษาไทยเป็นอย่างดี อย่างไรก็ตาม ในการสร้างขั้นตอนวิธี ยังคงมีประเด็นอีก ๒ ประเด็น ที่ต้องพิจารณาเพิ่มเติม กล่าวคือ
๑. สระหน้าซึ่งเขียนก่อนพยัญชนะต้น ได้แก่ เ แ โ ใ ไ จะต้องถูกพิจารณาหลังพยัญชนะ ที่ตามมา เพราะการเรียงลำดับจะต้องเรียงตามหมวดพยัญชนะต้น เช่น เก ต้องมาก่อน ขา ซึ่งการเปรียบเทียบ จะต้องเริ่มที่ ก กับ ข ไม่ใช่ เ กับ ข แต่ถ้าพยัญชนะต้นเหมือนกัน จึงจะพิจารณารูปสระ เช่น เก กับ กา เมื่อพบว่าขึ้นต้นด้วย ก เหมือนกัน จึงจะเปรียบเทียบ เ กับ า และพบว่า เกอยู่หลัง กา
๒. วรรณยุกต์ ไม้ไต่คู้ และไม้ทัณฑฆาต จะต้องไม่ถูกนำมาพิจารณาในขั้นแรก แต่ถ้าพบว่า ตัวสะกดส่วนอื่นเหมือนกันทุกประการ จึงจะนำมาพิจารณา เช่น ในการเปรียบเทียบ ไต้ก๋ง และไต่ไม้ จะต้องละเลยวรรณยุกต์ ราวกับเปรียบเทียบ ไตกง และ ไตไม และได้ผลว่า ไต้ก๋ง มาก่อนไต่ไม้ ส่วนในกรณีที่ตัวสะกดส่วนอื่น เหมือนกันทุกประการ จึงจะพิจารณาวรรณยุกต์ ไม้ไต่คู้ และไม้ทัณฑฆาต เช่น เก่ง มาก่อน เก้ง ทั้งนี้ โปรดสังเกตว่า ตำแหน่งวรรณยุกต์มีความสำคัญเหนือค่าของตัววรรณยุกต์เอง เช่น แหง่ มาก่อน แห่ง เพราะจุดที่ต่างกันคือ แห- แห่-
สำหรับขั้นตอนวิธีการเรียงลำดับคำภาษาไทยสำหรับคอมพิวเตอร์ ได้มีผู้พัฒนาหลายท่าน โดยยึดหลักการเรียงตามข้างต้น ตัวอย่างเช่น
๑. D. Londe และอุดม วโรตมสิกขดิตถ์ (พ.ศ. ๒๕๑๒) ได้เสนอวิธีการแปลงรูปแบบข้อความ ให้อยู่ในรูปที่สามารถเปรียบเทียบจากซ้ายไปขวาตามปกติได้
๒. วิชิต หล่อจีระชุณห์กุล (พ.ศ. ๒๕๒๒) ได้ปรับปรุงขั้นตอนวิธีของ Londe และ อุดม และนำเสนอเป็นเอกสารประกอบการสัมมนาของ สถาบันบัณฑิตพัฒนบริหารศาสตร์
๓. ยืน ภู่วรวรรณ (พ.ศ. ๒๕๒๙) ได้นำเสนอขั้นตอนวิธี CTW ในวารสารไมโครคอมพิวเตอร์ ฉบับที่ ๒๔ โดยเปรียบเทียบอักขระทีละกลุ่ม ซึ่งการแบ่งกลุ่มอาศัยพยัญชนะเป็นตัวบอกจุดสิ้นสุด และมีการแบ่งระดับของน้ำหนัก การเปรียบเทียบเป็น ๓ ระดับ คือ พยัญชนะ สระ และวรรณยุกต์ ตามลำดับ
๔. สัมพันธ์ คำไทยดี (พ.ศ. ๒๕๓๕) ได้เสนอฟังก์ชัน tstrcmp ในวารสารคอมพิวเตอร์รีวิว ฉบับที่ ๙๑ โดยแบ่งเป็น ๒ ขั้น ขั้นแรกเป็นการวิ่งสะสมผลต่างของวรรณยุกต์ จนถึงจุดที่ตัวสะกด ส่วนอื่นต่างกัน หรือจบสายอักขระ ขั้นที่ ๒ เป็นการเปรียบเทียบ หากเป็นการจบสายอักขระ ก็สามารถใช้ผลต่างวรรณยุกต์ที่สะสมไว้ หรือตรวจสอบความเป็นส่วนย่อยของสายอักขระได้ หากเป็นความต่างกันก่อนจบสายอักขระ ก็สามารถเปรียบเทียบ ณ จุดต่างได้ทันที โดยมีการตรวจสอบสระหน้า ก่อนทำการเปรียบเทียบที่เหมาะสม
๕. เทพพิทักษ์ การุญบุญญานันท์ (พ.ศ. ๒๕๔๐) ได้เสนอสาร NECTEC ฉบับที่ ๑๔ ให้เพิ่มส่วนขยายจากกฎการเรียงลำดับคำตามพจนานุกรม ฉบับราชบัณฑิตยสถาน กล่าวคือ หากมีเครื่องหมายวรรคตอนอื่นกำกับคำด้วย เช่น ไม้ยมก (ๆ) ไปยาลน้อย (ฯ) มหัพภาค (.) ก็จะต้องพิจารณาเครื่องหมายดังกล่าวหลังจากวรรณยุกต์ ไม้ไต่คู้ และไม้ทัณฑฆาต อีกต่อหนึ่ง ดังเช่นในลำดับต่อไปนี้ กรุงเทพ กรุงเทพฯ กรุงเทพมหานคร หรือในลำดับ ครก ค.ร.ก. ครบ เทพพิทักษ์เสนอให้ใช้วิธีขยายขอบเขตจาก tstrcmp ของสัมพันธ์ คำไทยดี