[アルゴリズム]並べ替え
5316 ワード
基本的な並べ替えアルゴリズムは大きく三つの種類に分けられ、並べ替え、並べ替え、並べ替えを選択します.以下は三つの並べ替えアルゴリズムのいくつかのjavascriptが整理を実現します.
並べ替えを選択
並べ替えを簡単に選択
並べ替えの直接挿入
泡の並べ替え
並べ替えを選択
並べ替えを簡単に選択
//
function selection_sort(arr)
{
var n = arr.length;
var i, j, min, t;
for( i =0; i < n -1; i ++)
{
min = i;
//
for( j = i +1; j < n; j ++)
if( arr[min] > arr[j])min = j;
//
if( min != i)
{
t = arr[min];
arr[min] = arr[i];
arr[i] = t;
}
}
return arr;
}
積み上げ順序// ( )
function heap_sort(arr)
{
// arr ,i ,n
// : arr ( , )
function heap_adjust(arr, i, n)
{
var child;
var t;
for (t = arr[i]; 2 * i + 1 < n; i = child)
{
// =2*( )+ 1
child = 2 * i + 1;
//
if ( child < n-1 && arr[child + 1] > arr[child])
++child;
// , ,
if (t < arr[child])
{
arr[i] = arr[child];
arr[child]= t;
}
else
//
break;
}
}
var n = arr.length;
var t;
// n/2-1
//
for (var i = n / 2 - 1; i >= 0; --i)
heap_adjust(arr, i, n);
// ,
for (var i = n - 1; i > 0; --i)
{
// ,
//
t = arr[i];
arr[i] = arr[0];
arr[0] = t;
// , , , 。
heap_adjust(arr, 0, i);
}
return arr;
}
並べ替えの挿入並べ替えの直接挿入
//
function insertion_sort(arr)
{
var n = arr.length;
var t, j;
// ,arr[0]
for(var i=1;i<n;i++)
{
// arr[i] (t )
t=arr[i];
j=i-1;
// t , t
while (j>=0 && arr[j]>t)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=t;
}
return arr;
}
ヒルの並べ替え// ( )
function shell_sort(arr)
{
var n = arr.length;
var fraction,i,j,t;
// 1/2
for(fraction=Math.floor(n/2); fraction>0; fraction=Math.floor(fraction/2)) {
for(i = fraction; i<n; i++ ) {
for(j = i-fraction; j>=0 && arr[j]>arr[fraction+j]; j-=fraction ) {
t = arr[j];
arr[j] = arr[fraction+j];
arr[fraction+j] = t;
}
}
}
return arr;
}
並べ替えの統合// ( )
function merge_sort(arr, s, e, b){
s = s || 0;
e = e || arr.length - 1;
b = b || new Array(arr.length);
if (s >= e)
return;
var m = (s + e) >> 1;
merge_sort(arr, s, m, b);
merge_sort(arr, m + 1, e, b);
for (var i = s, j = s, k = m + 1; i <= e; ++i)
b[i] = arr[(k > e || j <= m && arr[j] < arr[k]) ? j++ : k++];
for (var i = s; i <= e; ++i)
arr[i] = b[i];
}
並べ替え泡の並べ替え
// ( )
function bubble_sort(arr){
var t,i,j;
// n-1
for(i=0;i<arr.length-1;i++){
// arr[i..n]
for(j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
//
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
return arr;
}
クイックソート// ( )
function quick_sort(arr, l, r)
{
var i,j,x;
l = l || 0;
r = r || arr.length-1;
if (l < r)
{
i = l, j = r, x = arr[l];
while (i < j)
{
// x
while(i < j && arr[j] >= x)
j--;
if(i < j)
arr[i++] = arr[j];
// x
while(i < j && arr[i] < x)
i++;
if(i < j)
arr[j--] = arr[i];
}
arr[i] = x;
quick_sort(arr, l, i - 1); //
quick_sort(arr, i + 1, r);
}
return arr;
}
// ( )
function stack_quick_sort(arr) {
var stack = [0, arr.length - 1];
var i,index,e,t;
while (stack.length > 0){
e = stack.pop(), s = stack.pop();
if (s >= e)
continue;
t = arr[(s + e) >> 1];
arr[(s + e) >> 1] = arr[e];
arr[e] = t;
index = s - 1;
for (i = s; i <= e; ++i){
if (arr[i] <= arr[e]){
++index;
t = arr[i];
arr[i] = arr[index];
arr[index] = t;
}
}
stack.push(s, index - 1, index + 1, e);
}
return arr;
}