这里暂不考虑 时间 / 空间复杂度,初学JavaScript,先敲出代码即可。
1、冒泡排序
算法原理:[参考百度百科]
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实现代码:
function sort_bubble(arr){
if(!Array.isArray(arr)){return;}//需要传入的arr为数组
var len=arr.length;
for(let i=0; i < len; i++){ //从i等于0开始,把最大的值放置数组末尾
for(let j=0; j < len-i; j++){
if(arr[j] < arr[j-1]){ //如果前一位数比后面大,则交换位置
var temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
return arr; // return
}
list=[5,2,6,8,2,1,7,0,7];
sort_bubble(list);
console.log(list); //控制台打印出排序结果
chrome浏览器调试结果如下👇:
2、选择排序
选择排序(Selection sort)是一种简单直观的排序算法,也是一种不稳定的排序方法。
算法原理:[参考[百度百科]]
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
实现代码:
function sort_select(arr){
if(!Array.isArray(arr)){return;}//需要传入的arr为数组
var len=arr.length;
for(let i=0; i < len; i++){ //把最小的数放置最前面,最后按从小到大排序
var min=i;
for(let j=i+1; j < len; j++){ //找出从arr[j]开始的最小值的下标索引
if(arr[j]<arr[min]){
min=j;
}
}
var temp=arr[min]; //将最小值交换到索引为i的位置
arr[min]=arr[i];
arr[i]=temp;
}
}
list=[5,2,6,8,2,1,7,0,7];
sort_select(list);
console.log(list); //控制台打印出排序结果
浏览器调试结果👇:
3、快速排序
快速排序算法通过多次比较和交换来实现排序
算法原理:参考[百度百科]
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
这里找到了一篇文章跟着学习,文中图文讲解的已经非常清楚了,本文代码也是引用此文中的,文章地址:
https://blog.youkuaiyun.com/weixin_46726346/article/details/115839126
实现代码:
function sort(arr,begin,end){
if(begin < end){
let i = begin;
let j = end;
let empty = arr[begin];
while(i < j){
while(arr[j] > empty && i < j){
j--;
}
arr[i] = arr[j];
while(arr[i] <= empty && i < j){ //<=:当出现与empty相同数字的情况时
i++;
}
arr[j] = arr[i];
}
arr[i] = empty; //到这里已经把步骤(2)完成了
sort(arr,begin,i-1); //
sort(arr,i+1,end);
}else{
return;
}
}
let arr = [2,3,1,4,8,7,9,6,4];
len = arr.length;
sort(arr,0,len-1);
console.log(arr);
浏览器调试结果👇:
End.
就写三个吧