1.冒泡排序
//声明一个空数组
var arr=[];
//使用for循环添加随机数组
for(var i=0;i<10;i++){
arr[i]=Math.round(Math.random()*100);
}
//打印随机数组
console.log(arr);
//加入数组中有10个元素则需要循环9遍
//多以最大的循环次数时arr.length-1
for(var i=0;i<arr.length-1;i++){
//外层循环时整体的循环次数
//外层循环每循环一圈就能确定当前最大的元素
for(var j=0;j<arr.length-i-1;j++){
//负责元素之间的两两对比
//由于外层每循环一圈都能确定一个最大的元素,所以外层for循环的循环次数是arr.length-i-1
//现在让相邻元素做对比
if(arr[j]>arr[j+1]){
//如果前一个元素大于后一个与乃是则将他们位置交换,互换其实就是值的互换
var a=arr[j];
a[j]=arr[j+1];
arr[j+1]=a;
}
}
}
//打印数组
console.log(arr);
2.选择排序
选择排序原理:每一圈确定出一个当前最小的元素,然后跟最前面的元素交换位置,已经比较出来的最小元素不参加后面的循环,比如第一圈确定出来的跟第一位交换位置,第二圈确定出来跟第二个交换位置
外圈负责记录比较几圈,整个数组比较的次数
内圈负责每个元素之间的比较,内圈比较的时候起始位置
i=>0 1 2...
j=>1 2 3...
所以内圈循环的起始位置应该是j=i+1;
内圈的结束位置,由于内圈循环时每次都要对比到最后一个元素,所以j<arr.length;
var arr=[];
for(var i=0;i<10;i++){
arr[i]=Math.round(Math.random()*100);
}
console.log(arr);
//外圈控制整个数组的排序次数
for(var i=0;i<ar.length;j++){
//外圈每一次开始循环的时候都将当前循环的第一个元素先假设为最小的元素,然后拿着这个元素跟循环的其他元素做对比,如果有元素比min更小那么这个元素就是新的min
var min=j;
//内圈的控制元素之间的对比
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j;
}
}
//因为一整圈比完之后才会换位置,所以在外层for循环换位置,将确定出来的min跟当前参与循环的第一个元素换位置
var num=arr[i];
arr[i]=arr[min];
arr[min]=num;
}
console.log(arr);
3.插入排序
从第二个元素开始比较(从第二个元素开始到最后一个元素结束),每次比较都是跟排在自己前面的元素进行比较
var arr=[];
for(var i=0;i<10;i++){
arr[i]=Math.round(Math.random()*100);
}
console.log(arr);
for(var i=1;i<arr.length;i++){
//从第二个元素开始比较到最后一个元素结束,将当前元素和自己前面的元素进行比较,比如循环第一次的时候当前元素时第二个元素,所以它就要跟第一个元素进行比较
for(var j=i;j>0;j--){
//内层循环是从当前做对比的元素开始向左进行比较,所以内层循环的起始位置应该是当前元素的位置,因为要向左开始比较所以应该是递减的(j--),在没有遇到比他海啸的元素之前当前比较应该一直进行到都一个元素才结束(j<0)
if(arr[j]<arr[j-1]){
var max=arr[j-1];
arr[j-1]=arr[j];
arr[j]=max;
}
}
}
//打印数组