冒泡排序
冒泡排序的思想:
- 临近的两个元素互相比价,每轮循环找出剩余元素中最大或最小值,将其放于数组的最后和最前,循环的长度减一。
- 剩余的元素再重复第一步,直至循环的长度等于1,停止循环,排序完成。
function bubbleSort(arr){
var i = arr.length,temp, j;
while(i!==1){
for(j=0;j<i-1;j++){
if(arr[j] > arr[j+1]){
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
i--
}
return arr
}
选择排序
- 两层for循环,内层每次默认最值为外层for循环的变量为下标。内层for循环每次找出最小或最大值的下标。
- 经过内层循环的一次遍历,将得出的最值与默认的最值位置进行对比,不相等说明默认的最值不是最值,于是交换其值。这样每次就能从剩的值中找出最值并排序。
function selectSort(arr){
for(let j=0;j<arr.length-1;j++){
min = j;
for(let i= j+1;i<arr.length;i++){
if(arr[min] > arr[i]){
min = i;
}
}
if(min !== j){
let temp;
temp = arr[min]
arr[min] = arr[j]
arr[j] = temp
}
}
return arr
}
计数排序
- 找出数组中最大值,声明一个临时数组。
- 依靠一个for循环向临时数组中保存传入的数组中的数据,下标代表其值,数组中该下标对应的数值为该数字的个数。
- 另一个for循环中循环条件小于等于最大值。只要临时数组中的值大于0就向目标数组中保存,目标数组下标值每次自增1,临时数组的值就减一。 for循环完毕即可完成排序。
function countingSort(arr){
var max = Math.max(..arr);
var temp = [];
var num = 0;
for(let i=0; i<arr.length; i++){
if(!temp[arr[i]]){
temp[arr[i]] = 1;
}else{
temp[arr[i]]++;
}
}
for(i=0; i<max; i++){
while(temp[i] > 0){
arr[num++] = i;
temp[i]--;
}
}
return arr
}