迅速な並べ替え、並べ替えを選択して、直接挿入して、泡の並べ替えのjavascriptは実現します.
5757 ワード
クイックソート:配列の最初の要素を基準要素として選択し、左右の走査配列は、基準要素以上の要素を配列の右に置いて、基準要素以下の要素を左に置いて、基準要素を中間に置く.次の配列の基準要素の左側は基準要素に等しいもので、右のものは基準要素に等しいものより大きいです.左と右に自分自身を再帰的に呼び出します.なお、配列の右側に左の要素が配置されている場合は、i,j元素の交換位置ではなく、i位置を直接カバーする要素であるべきです.
function quickSort(arr, s, e) {
var i = s,
j = e,
temp;
if (i < j) {//
temp = arr[s];// ,
while (i != j) {
while (i < j && arr[j] >= temp) j--;
arr[i] = arr[j];// , i ( i , )
while (i < j && arr[i] <= temp) i++;
arr[j] = arr[i];// , j
}
arr[i] = temp;// i,j ,
quickSort(arr, s, i - 1);// ,i , i-1
quickSort(arr, i + 1, e);
}
}
直接挿入順序:配列は秩序領域と無秩序領域に分けられ、無秩序領域の最初の要素を秩序領域の正しい位置に挿入する.最初は、秩序ゾーンは一つの要素しかありませんでした.(一つの要素しかないので、秩序化されています.)挿入される度に、秩序ゾーン長+1が配列長に等しいまで続きます. function insertSort(arr) {
for (var i = 1; i < arr.length; i++) {// , i=1
var j = i - 1;//i , ,
var temp = arr[i];// ,
while (j >= 0 && arr[j] > temp) {// arr[j] temp , arr[j] temp , , , j>=0 , -1 ,
arr[j + 1] = arr[j];// temp
j--
}
j++;// j temp ,temp , j +1
arr[j] = temp;
}
}
直接並べ替えの再帰版を挿入します.普通版から明らかな再帰関係が見られます.だからもう一つ再帰的なものを書きます.再帰的な長所はコードが少ないと思います.簡単に見えるだけです.欠点はアルゴリズムの詳細がないので、分かりにくいです.ここで重要な部分は秩序エリアの長さが1ずつ増加していますので、次の区間の右端点は+1になります.function insertSort2(arr, e) {
var temp = arr[e];
var e1 = e - 1;
if (e < arr.length) {
while (e1 >= 0 && arr[e1] >= temp) {
arr[e1 + 1] = arr[e1];
e1--;
}
e1++;
arr[e1] = temp;
insertSort2(arr, e + 1);
}
}
並べ替えを選択します.同様に秩序エリアと無秩序区に分けられています.直接挿入順序との違いは、無秩序エリアから最小のものを選ぶたびに、順序ゾーンの末尾に並べばいいです.function selectSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {// , n-1 , ,
var minIndex = i;// , ,
for (var j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
arr[i] = [arr[minIndex], arr[minIndex] = arr[i]][0];// , ,
}
}
泡の並べ替え function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = [arr[j + 1], arr[j + 1] = arr[j]][0];
}
}
}
}