フロントエンド面接ではよく質問(泡立ちと速排)と安定性の問題があります
2264 ワード
秋の募集に触れたばかりなのに、面接が来るとコードを引き裂くという人が多いのを聞いた.私は他の人に経を取って、泡と速い列をまとめて、後でハソートアルゴリズムの安定性をまとめました.
バブルソート:(データ規模が小さい場合に適用)
バブルは通俗的に並べ替えに関与するデータが水中の気泡がゆっくりと水面に浮かぶように数列の先端に「浮かぶ」ことだ.
バブルソートのポイント:
1、2層の循環、外層の循環は訪問数列の繰り返しの回数を制御して、内層の循環はデータの比較、交換を行って、データの“浮上”です.
2、内層循環は隣接するデータで比較する.
例えば、arr=[1,5,8,2,4,9]の配列があり、内層サイクルは1対5比であり、その後5対8比であり、、、、このようにずっと比である.
var arr = [9, 2, 4, 1, 8];
function bubbleSort(arr) {
var i = arr.length;
var j;
var temp;
while (i > 0) {
for (j = 0; j < i - 1; j++) {
console.log(arr[j],arr[j+1]);//
console.log("------------");
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
console.log("i===="+i);
i--;
}
return arr;
}
console.log(bubbleSort(arr));
配列外ループ回数は配列長である.外部サイクルごとに内サイクルを2回比較した後,最大値を配列末尾に並べた.
クイックソート:
クイックソートの考え方:
1配列の最中間を先に探す個数を基準とする
2配列をこの基準で基準より小さいleft配列と基準より大きいright配列に分け、
3上記の2つのステップを繰り返します.
var arr = [90,9,12,6,30,60,36,32,40];
function quickSort(arr){
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2); //
var pivot = arr.splice(pivotIndex, 1)[0]; //
var left = []; //
var right = [];//
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]); //
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
//concat() , , 。
console.log(quickSort(arr));
グループ化、1つの基準を探して、小さい数は左に置いて、大きい数は右に置いて、順番にグループ化して配列要素が1になるまで
ソートアルゴリズム:
不安定:高速ソート、選択ソート、スタックソート、ヒルソート(高速選択スタック希)
安定:挿入ソート、バブルソート、集計ソート、基数ソート(プラグインベース)
アルゴリズムの安定性判断:並べ替え前の2つの等しい数のシーケンスにおける前後位置順序と並べ替え後の2つの前後位置順序は同じである