Sorting Function in C/C++

วิธีการ Sort Array (เรียงลำดับ) มีหลายวิธีมาก 
แต่ละวิธีก็มีความเร็วที่แตกต่างกันไป ตั้งแต่ O(n^2) ไปจนถึง O(nlogn) 
แล้วการเขียนสดนั้น ไม่ใช่เรื่องง่ายแน่ ซึ่งแน่นอนมีตัวช่วยเยอะแยะ :)

วิธีที่ใช้กันบ่อยๆ ได้ทั้ง C/C++ ก็คือใช้ qsort() ใน stdlib.h (cstdlib)
Quick Sort == Speed O(nlogn)

แล้วถ้าเราจะ Sort แบบกลับด้านล่ะ (เรียงจากมากไปน้อย) ง่ายมากเลย แค่แก้ compare function 


การเข้าใจก็ไม่มีอะไรมาก compare เป็น Function Pointer ที่จะรับ argument 2 ตัว
เพื่อมาเปรียบเทียบหาความแตกต่างของค่าทั้ง 2 เพื่อที่จะเอาผลลัพธ์ไปใช้ qsort ใช้ในการสลับค่า

ทีนี้การมี void * (void pointer) หมายความว่า Type ที่เข้ามาจะเป็นอะไรก็ได้ 
ดังนั้นเราสามารถประยุกต์มาใช้ Sort Character in String ได้ด้วย เช่น

** จะเห็นว่าด้านบนผมบอกว่า qsort() อยู่ใน stdlib.h (cstdlib) 
แต่ผมก็ไม่ได้เขียนลงไป เพราะผมลืม นั่นเพราะ C++ Compiler ตัวใหม่ๆ 
จะมี stdio.h และ stdlib.h อยู่ใน iostream อยู่แล้ว :)

แถมให้นิด เนยสดแห่ง Twitter ท่านได้ Comment มา
การใช้ qsort() นั้นยังไงก็ต้องใช้ Function Pointer เท่านั้น แต่ถ้าอยากใช้ Anonymous Function
หรือที่ในภาษาตระกูล C เรียกว่า "Blocks" จะต้องเปลี่ยนไปใช้ qsort_b() แทน

จะเห็นว่าความยุ่งยากของการ Sort โดยใช้ qsort() อยู่ที่การเขียน compare function
ทีนี้ถ้าเราเขียน C++ อยู่แล้วล่ะ เรามีทางออกที่แจ่มกว่านั้น แต่เฉพาะภาษา C++ เท่านั้น
โดยเราจะใช้ sort() จาก STL Algorithm Library

และนอกจากเราจะใช้ sort() กับ C Array แล้วใน C++ ก็มี Container (Collection) ให้ใช้
 อยู่ใน Standard Template Library เราจะก็สามารถที่จะใช้ sort() กับข้อมูลพวกนั้นได้เหมือนกัน
แต่ต้องส่งค่าด้วย Forward Iteration ซึ่งใช้ในการบอกตำแหน่งของ element 

ผมแถมการเขียน for_each() ไปให้ดูนิดนึงด้วยนะ :P ลองเอาไปใช้ดู ใช้ไม่ยาก เท่ดี ฮาาาาา

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android