Posts

Showing posts with the label sort

[iOS Dev] NSSortDescriptor

Image
Sorting หรือการเรียงลำดับ เนื้อหาสำคัญในวิชา Computer Science 101 (ประเทศไทยเหมือนะจะเรียนในวิชา Data Structure) แต่ในความเป็นจริงแล้ว เมื่อไหร่กันที่คุณต้องการรู้ว่า "เราจะเขียน Quicksort ยังไง ?" เมื่อเราสร้าง Apps การเรียงลำดับคืออะไรบางอย่างที่คุณจะต้องคิดว่ามันจะเร็ว เป็นฟังก์ชั่นที่ใช้ง่ายและชัดเจน และเมื่อมันมีให้ใช้ คุณจะรู้สึกถึงในถึงความยากลำบากในหาสิ่งที่ง่ายกว่า NSSortDescriptor ใน Foundation Framework NSSortDescriptor เป็น Object ใน Objective-C ที่จะสร้างขึ้นด้วยตัวแปร (parameters) ดังนี้ key : สำหรับ Collection ที่จะทำการเรียงลำดับ key คือค่าจะนำมาพิจารณาในการเรียงลำดับวัตถุแต่ละตัวใน Collection ascending : มีค่าเป็น Boolean ที่จะกำหนดว่าจะให้ Collection เรียงลำดับแบบไหน จากน้อยไปมาก (YES) หรือมากไปน้อย (NO) และยังมีตัวแปรตัวที่ 3 ซึ่งจะเป็นส่งไปเป็นฟังก์ชั่นที่ไว้ใช้เปรียบเทียบค่าที่ N และค่าอื่นๆ ในขณะที่ทำการเรียงลำดับ โดยค่าเริ่มต้นจะทำการเปรียบเทียบความเท่ากัน (equality) ของวัตถุนั้นๆ ซึ่งจะส่งไปในรูปแบบของ Objective-C's Selector (SEL) ...

Sorting Function in C/C++

Image
วิธีการ 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 ท่านได้ C...