选择排序
假设一个最小值,选出最小值,互换位置......
- 假设一个最小值以及最小值的下标
- 找出最小值以及最小值的下标
- 假设的最小值与找出的最小值换位
function selectSort(arr){
for (var n = 0; n < arr.length-1; n++){
// 1.假设一个最小值以及最小值的下标:
var min = arr[n];
var minIndex = n;
// 2.找出最小值以及最小值的下标:
for (var i = n+1; i < arr.length; i++){
if(min > arr[i]){
min = arr[i];
minIndex = i;
}
}
// 3.假设的最小值与找出的最小值换位:
var tmp = arr[n];
arr[n] = min;
arr[minIndex] = tmp;
}
return arr;
}
冒泡排序
相邻两个数进行比较,互换位置......
function bubbleSort(arr){
for (var n = 0; n < arr.length-1; n++){ //比较轮数
for (var i = 0; i < arr.length-(n+1); i++){ //每一轮比较次数
if (arr[i] > arr[i+1]) {//前面的大于后面的:换位
var tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
}
return arr;
}
快速排序
找中点,分左右,递归运算......
function quickSort(arr){
// 递归出口
if (arr.length <= 1) return arr;
// 找中点(中点的位置的下标及值)
var midIndex = parseInt( arr.length/2 );
var mid = arr[midIndex];
// 分左右
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] === mid) {
continue; //跳过本次循环
}
if (arr[i] < mid) {//与中点比较分左右
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
// 递归运算(左中右三个数组合并)
return quickSort(left).concat([mid],quickSort(right));
}
桶排序
创建桶,把数据放到桶里(对应下标的位置),遍历桶取出有数据的桶(的下标)......
function bucketSort(arr){
var bucket = []; // 1. 创建桶
for (var i = 0; i < arr.length; i++){
// 2. 把数据放到桶里(对应下标位置)
var item = arr[i];
bucket[item] = 'abc';
}
arr.length = 0; // 3. 清空数组
for (var index in bucket){
// 4. 遍历桶取出有数据的桶(的下标)
arr.push(parseInt(index));// index => string
}
return arr;
}