Javascriptののソートアルゴリズムの実現
いくつかの単語の男は、コードを直接、言いました。
1.バブルソート
後者の大きい、2つの間の位置の交換は、さもなければ同じ位置よりも前者の場合、2つの数字が続く1は、隣接する比較します
前記第1ステップの動作の方法は、最後の数まで、長さ1の数字の前に繰り返されます
グラフィックの例
コードは以下の通りであります:
function bubbleSort(nums) {
var key = 0;
for (var i = 0; i < nums.length - 1; i++) {
for (var j = i + 1; j < nums.length; j++) {
if (nums[i] > nums[j]) {
key = nums[i];
nums[i] = nums[j];
nums[j] = key;
}
}
}
return nums;
}
2. [ソート
図1に示すように、最小のシーケンス番号との前の交換位置の数を見つけます
グラフィックの例
コードは以下の通りであります:
function select(nums){
var item =0;
for(var i = 0;i<nums.length-1;i++){
var min = i; //把最小索引给min
for(var j = i+1;j<nums.length;j++){
if(nums[min] > nums[j]) { //对比,如果最小索引的vlaue大于其他value,则将该索引给min
min = j
}
}
item = nums[min]; //最小索引给他
nums[min] = nums[i];
nums[i] = item;
}
return nums;
}
3、クイックソート
1、中間体の数は、基準として、アレイを介して、左側のアレイの基準数よりも少ない、右のアレイの基準数よりも大きいされていることを見つけます
図2に示すように、同じ方法は、これらの二つのアレイがソートされ
3、再帰
グラフィックの例:
コードは以下の通りであります:
var quickSort = function(nums) {
if (nums.length <= 1) return nums;
var pivotIndex = Math.floor(nums.length / 2);
var pivot = nums.splice(pivotIndex, 1)[0]; //splice返回的是一个数组,所以用[0]取出来
var left = [];
var right = [];
for (var i = 0; i < nums.length; i++) {
if (nums[i] < pivot) {
left.push(nums[i]);
} else {
right.push(nums[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right)); //使用递归完成快排
}
4、挿入ソート
1は、配列[]はソートされ、[]ソートされていない2つの部分に分割され、第一セット番号[ソート]、[残り]未分類
図2は、順次前方にソートされ、[部]、未分類の最初の[]の数から引き出され、そして数が抽出よりも大きい場合、比較は、挿入された後、前方継続、またはポイント
グラフィックの例:
コードは以下の通りであります:
function insertionSort(nums) {
var i,j,value;
var len = nums.length;
for(i = 0;i<len;i++){
value = nums[i];
for(j = i-1;j>=0&&nums[j]>value;j--){
nums[j+1] = nums[j]; //向后移一位
}
nums[j+1] = value;
}
return nums
}