ソートアルゴリズム
バブルソート
function bubbleSort(data) { var l = 0, r = data.length - 1, i, temp, last; while(l < r) { i = r; last = l; while(i > l) { if(data[i-1] > data[i]) { temp = data[i-1]; data[i-1] = data[i]; data[i] = temp; last = i; } --i; } if(last == l) return; l = last; } }
挿入ソート
function insertionSort(data) { var n = data.length, i, temp, j; for(i = 1; i < n; ++i) { temp = data[i]; for(j = i; j > 0 && data[j-1] > temp; --j) { data[j] = data[j-1]; } data[j] = temp; } }
シェルソート
function shellSort(data) { var n = data.length, h, i, j, temp, k; for(h = 1; h < n; h = h * 3 + 1) ; while(1 < h) { h = h / 3 | 0; for(i = 0; i < h; ++i) { for(j = i + h; j < n; j += h) { temp = data[j]; for(k = j; k > i && data[k-h] > temp; k -= h) { data[k] = data[k-h]; } data[k] = temp; } } } }
選択ソート
function selectionSort(data) { var n = data.length, i, minIdx, j, temp; for(i = 0; i < n; ++i) { minIdx = i; for(j = i + 1; j < n; ++j) { if(data[minIdx] > data[j]) { minIdx = j; } } temp = data[minIdx]; data[minIdx] = data[i]; data[i] = temp; } }
マージソート
function mergeSort(array) { var n = array.length; if (n < 2) return array; var m = n / 2 | 0; var array1 = array.slice(0, m); var array2 = array.slice(m); mergeSort(array1); mergeSort(array2); var i = 0; var j = 0; var k = 0; n = array1.length; m = array2.length; while (i < n && j < m) { if (array1[i] > array2[j]) { array[k++] = array2[j++]; } else { array[k++] = array1[i++]; } } if (i < n) { do { array[k++] = array1[i++]; } while (i < n); } else if (j < m) { do { array[k++] = array2[j++]; } while (j < m); } return array; }