การจัดเรียง (Sort)
การเรียงลำดับข้อมูล (Sorting)

การเรียงลำดับข้อมูล (Sorting) คือ การนำชุดข้อมูลมาดำเนินการประมวลผลให้ได้ชุดข้อมูลใหม่ที่มีการจัดเรียงใหม่ ซึ่งผลการจัดเรียงอาจเรียงข้อมูลจากน้อยไปมาก (Ascending) หรือมากไปน้อย (Descending)

อาร์เรย์ (Array) หรือแถวลำดับ คือ การรวมกลุ่มของตัวแปรที่สามารถใช้ตัวแปร ชื่อเดียวกันแทนข้อมูลสมาชิกได้หลายตัวในคราวเดียว ด้วยการใช้เลขดรรชนี (Index) หรือซับสคริปต์ (Subscipt) เป็นตัวอ้างอิงตำแหน่งสมาชิกบนแถวลำดับนั้น [3]p.80

+ sort_sample.xlsx
+ https://en.wikipedia.org/wiki/Sorting_algorithm

เรื่องยกกำลัง และ log [3]p.59
ถ้ามีข้อมูล 10 ตัว ก็จะได้ n = 10
กรณีที่ 1 : linear loops
for(i = 0; i<n; i++) ...
ได้ O(n)

กรณีที่ 2 : nested loops
for(i = 0; i<n; i++) ...
for(j = 0; j<n; j++) ...
ได้ O(n2)

กรณีที่ 3 : logarithmic loops
for(i = 0; i<n; i*=2) ...
ได้ O(log n)

กรณีที่ 4 : nested loops
for(i = 0; i<n; i++) ...
for(j = 0; j<n; j*=2) ...
ได้ O(n log n)
ประสิทธิภาพของการเรียงลำดับข้อมูล 
หรือ BigO ของการจัดเรียงข้อมูลแต่ละแบบ [3]p.334
1. แบบ Selection Sort คือ O(n2)
2. แบบ Heap Sort คือ O(n log n)
3. แบบ Insertion Sort คือ O(n2)
4. แบบ Bubble Sort คือ O(n2)
5. แบบ Quick Sort คือ O(n log n)
6. แบบ Merge Sort คือ O(n log n)
เทียบเวลาการทำงานของฟังก์ชันเมื่อส่งค่า 50 หรือ 100 ข้อมูล [3]p.64
ลำดับฺBigOf(50)f(100)
1O(logn)5.646.64
2O(n)50100
3O(nlogn)282664
4O(n2)250010,000
5O(n3)12,500100,000
6O(2n)1.126 * 10151.27 * 1030
7O(n!)3.0 * 10649.3 * 10157
factorial คือ ผลคูณของจำนวนเต็มบวกทั้งหมดที่น้อยกว่าหรือเท่ากับ n
สามารถเขียนแทนด้วย n!
Flash กับ Arrow
ความเร็ว และแม่นยำ มีความสำคัญมาก นึกถึง google กับ yahoo
รหัสต้นฉบับด้วยภาษาจาวา 10 แบบ
- แบบ 1 Bubble Sort(2dim)
- แบบ 2 Selection Sort
- แบบ 3 Insertion Sort
- แบบ 4 Binary Sort
- แบบ 5 Bucket Sort
- แบบ 6 Quick Sort
- แบบ 7 Shell Sort
- แบบ 8 Merge Sort
- แบบ 9 Radix Sort #
- แบบ 10 Heap Sort #
- จัดเรียง 3 แบบ main + Dyn
- แนวคิด sorting (Applet) ubc.ca # 
 
Godzilla 1998 สนใจเรื่อง Size
หนังสือ Data Structures: A Pseudocode Approach with C
Bubble Sort Algorithm

Data Structures: A Pseudocode Approach with C
By Richard F. Gilberg, Behrouz A. Forouzan
Book in github.com
Selection Sort (ม.พะเยา)
Algorithm selectionSort (list,last)
/*	Pre 	list must contain at least one item
			last contains index to last element in the list
	Post	list has been rearranged smallest to largest
*/	
1	set current to 0
2	loop (until last element sorted)
	1	set smallest to current 
	2	set walker to current + 1
	3	loop (walker <= last)
		1	if (walker key < smallest key)
			1	set smallest to walker
		2	end if
		3 increment walker
	4	end loop
		// หน่วยที่เล็กที่สุด เปลี่ยนกับตำแหน่งปัจจุบัน
	5	exchange (current, smallest)
	6	increment current
3	end loop
end selectionSort	
Bubble Sort (ม.พะเยา)
/*	Pre 	list must contain at least one item
			last contains index to last element in the list
	Post	list has been rearranged in sequence low to high	
*/	
Algorithm bubbleSort (list, last)
1	set current to 0
2	set sorted to false	// default not finish before loop
3	loop (current <= last AND sorted = false)
		// ทุกการทำซ้ำ เป็นการจัดเรียง
	1 	set walker to last
	2	set sourted to true // default finish in loop
	3	loop (walker > current)
		1	if (walker data < walker - 1 data)
				// หากสลับตำแหน่ง แสดงว่าการจัดเรียงยังไม่จบ
			1	set sorted to false // it is not finish
			2	exchange (list, walker, walker - 1)
		2	end if
		3	decrement walker
	4 	end loop
	5	increment current
4	end loop
end bubblesort
Algorithm : การจัดเรียงแบบ Bubble sort ด้วยภาษา Pascal [3]p.319
procedure bubbleSort( A : list of sortable items )
   n = length(A)
   repeat 
     swapped = false
     for i = 1 to n-1 inclusive do
       /* if this pair is out of order */
       if A[i-1] > A[i] then
         /* swap them and remember something changed */
         swap( A[i-1], A[i] )
         swapped = true
       end if
     end for
   until not swapped
end procedure
+ https://en.wikipedia.org/wiki/Bubble_sort
Algorithm : Bubble Sort
<script>
var a = [4, 1, 3, 5, 2, 6]; 
function bubbleSort(a)
{
    var swapped;
    do {
        swapped = false;
        for (var i=0; i < a.length-1; i++) {
            if (a[i] > a[i+1]) {
                var temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
                swapped = true;
            }
        }
    } while (swapped);
}
console.log(a); 
bubbleSort(a);
console.log(a);
</script>
+ อ้างอิงจาก http://www.stoimen.com
Algorithm : Selection Sort
<script>
var a = [4, 1, 3, 5, 2, 6]; 
function selectionSort(a) {  
    var length = a.length;
    for (var i = 0; i < length - 1; i++) {
        var min = i;
        for (var j = i + 1; j < length; j++) { 
            if (a[j] < a[min]) { 
                min = j; 
            }
        }
        if (min != i) {
            var tmp = a[i];
            a[i] = a[min];
            a[min] = tmp;
        }
    }
}
console.log(a);
selectionSort(a);
console.log(a);
</script>
+ อ้างอิงจาก http://codingmiles.com
Algorithm : Quick Sort
<script>
var a = [4, 1, 3, 5, 2, 6]; 
console.log(a);
quickSort(a, 0, a.length -1);
console.log(a);
function  quickSort(arr, left, right)
{
	var i = left;
	var j = right;
	var tmp;
	pivotidx = (left + right) / 2; 
	var pivot = parseInt(arr[pivotidx.toFixed()]);  
	/* partition */
	while (i <= j)
	{
		while (parseInt(arr[i]) < pivot) 	i++;
		while (parseInt(arr[j]) > pivot) 	j--;
		if (i <= j)
		{
			tmp = arr[i];
			arr[i] = arr[j];
			arr[j] = tmp;
			i++;
			j--;
		}
	}
	/* recursion */
	if (left < j) quickSort(arr, left, j);
	if (i < right) quickSort(arr, i, right);
	return arr;
}
</script>
+ อ้างอิงจาก https://stackoverflow.com
Algorithm : Heap Sort
<script>
var a = [4, 1, 3, 5, 2, 6]; 
console.log(a);
heapSort(a);
console.log(a);

function swap(a, i, j) {
    var tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}

function max_heapify(a, i, length) {
    while (true) {
        var left = i*2 + 1;
        var right = i*2 + 2;
        var largest = i;

        if (left < length && a[left] > a[largest]) {
            largest = left;
        }

        if (right < length && a[right] > a[largest]) {
            largest = right;
        }

        if (i == largest) {
            break;
        }

        swap(a, i, largest);
        i = largest;
    }
}

function heapify(a, length) {
    for (var i = Math.floor(length/2); i >= 0; i--) {
        max_heapify(a, i, length);
    }
}

function heapSort(a) {
    heapify(a, a.length);
    for (var i = a.length - 1; i > 0; i--) {
        swap(a, i, 0);
        max_heapify(a, 0, i-1);
    }
}
</script>
+ อ้างอิงจาก https://gist.github.com
Algorithm : Visualization and Comparison of Sorting Algorithms
..
เอกสารฉบับเต็ม (Full Text)

รศ.ดร.สมชาย ประสิทธิ์จูตระกูล

Bruno R. Preiss

Mark Allen Weiss

William H. Ford

DB: พัฒณืรพี

Michael Mcmillan
เอกสารอ้างอิง (Reference)
[1] นิรุธ อำนวยศิลป์, "โครงสร้างข้อมูล : การเขียนโปรแกรมและการประยุกต์", บริษัท ดวงกมลสมัย จำกัด., กรุงเทพฯ, 2548.
[2] Guy J.Hale, Richard J.Easton, "Applied Daa Structures Using Pascal", D.C.Heath and Company. Canada. 2530.
[3] โอภาส เอี่ยมสิริวงศ์, "โครงสร้างข้อมูล (Data Structures) เพื่อการออกแบบโปรแกรมคอมพิวเตอร์", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2549.
[4] วิวัฒน์ อภิสิทธิ์ภิญโญ, อมร มุสิกสาร, "โครงสร้างข้อมูล (Data Structures)", บริษัท เอ-บุ๊ค ดิสทริบิวชั่น จำกัด., กรุงเทพฯ, 2548.
[5] เนรมิต ชุมสาย ณ อยุธยา, "เรียนรู้โครงสร้างข้อมูลและอัลกอริทึมด้วย Java", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2550.
[6] ขนิษฐา นามี, "โครงสร้างข้อมูลและอัลกอริทึม", บริษัท ไอดีซี อินโฟ ดิสทริบิวเตอร์ เซ็นเตอร์ จำกัด., กรุงเทพฯ, 2548.
[7] Michael McMillan, "Data Structures and Algorithms with JavaScript", O’Reilly Media, Inc., USA., 2014.
[8] Loiane Groner, "Learning JavaScript Data Structures and Algorithms", Packt Publishing, 2014.

http://goo.gl/72BPC