JS冒泡排序和选择排序
一.冒泡排序
通过for循环,实现排序,每次循环,找到一个当前的最大值,多次循环,完成排序。
以下为冒泡排序的运行原理:
现在我们先定义一个数组 var a = [5,7,4,2,3,1,8,6,9,10];
var a = [5,7,4,2,3,1,8,6,9,10];;
console.log(a);
让数组继续一次以下循环
for (var i = 0; i <= a.length-1; i++){
if (a[i] > a[i+1] ){ // 如果出现一个数大于他后面的一个数
var res = 0; // 他就和他后面的数交换位置
res = a[i];
a[i] = a[i+1];
a[i+1] = res;
}
}
console.log(a);
就会发现进行一次该循环就会找出该数组的最大值放在最后,我们可以再进行一次循环观看效果
就会找出剩下的数值中最大的数放在他们的最后
所以一次循环我们找出一个最大的数,所以有多少个数我们就进行多少次循环,就能完成排序了
所以代码如下:
var a = [5,7,4,2,3,1,8,6,9,10,0];
console.log(a);
for (var j = 0; j <= a.length-1; j++){
for (var i = 0; i <= a.length-1; i++){
if (a[i] > a[i+1] ){ // 如果出现一个数大于他后面的一个数
var res = 0; // 他就和他后面的数交换位置
res = a[i];
a[i] = a[i+1];
a[i+1] = res;
}
}
}
console.log(a);
冒泡排序就完成了,以下为我们对代码进行的优化
var a = [5,7,4,2,3,1,8,6,9,10,0];
console.log(a);
for (var j = 0; j <= a.length-1 - 1; j++){
/*
我们一次循环找到一个最大值,
当我们只剩下最后两个值时找到了最大值
我们就不需要再继续一次循环了
所以 j <= a.length-1; 可以改为 j <= a.length-1-1;
同理 i <= a.length-1; 可以改为 i <= a.length-1-1;
*/
for (var i = 0; i <= a.length-1-1-j; i++){
// 又因为我们进行一次循环后就确定了一个最大值的位置
// 然后我们再进行一次循环时 的循环的次数就可以少一次
// 所以 i <= a.length-1-1; 可以改为 i <= a.length-1-1-j;
if (a[i] > a[i+1] ){
var res = 0;
res = a[i];
a[i] = a[i+1];
a[i+1] = res;
}
}
}
console.log(a);
二.选择排序
从起始位置开始,找最小的数值所在的索引下标,如果最终存储的索引下标,不是起始位置,就与起始位置交换存储数据
以下为冒泡排序的运行原理:
我们还是用刚才的数组 var a = [5,7,4,2,3,1,8,6,9,10];
我们利用以下方法寻找最小数值的索引下标
for (var i = 0; i <= a.length-1; i++){
if (a[min] > a[i]){//当 a[min] > a[i] 时我们就认为 a[i] 为最小值
min = i; //当整个数组循环完了后min 就等于 最小值 a[i] 的i
}
}
我们找到了最小数值的索引小标发现他不是在首位,我们就需要把首位的数和他进行交换
if (min != 0){
var res = 0;
res = a[0];
a[0] = a[min];
a[min] = res;
}
console.log(a);
我们首位数找到了接下来我们就找第二位数
var min = 1;
for (var i = 1; i <= a.length-1; i++){
if (a[min] > a[i]){
min = i;
}
}
if (min != 1){
var res = 0;
res = a[1];
a[1] = a[min];
a[min] = res;
}
console.log(a);
我们这样依次找下去,找到最后一个数就完成,我们就写成一个循环这样选择排序就完成了
for (var j = 0; j <= a.length-1; j++){
var min = j;
for (var i = j; i <= a.length-1; i++){
if (a[min] > a[i]){
min = i;
}
}
if (min != j){
var res = 0;
res = a[j];
a[j] = a[min];
a[min] = res;
}
}
console.log(a);
选择排序就完成了,以下为我们对代码进行的优化
var a = [5,7,4,2,3,1,8,6,9,10,0];
console.log(a);
for (var j = 0; j <= a.length-1-1; j++){
// 倒数第2个数的值都找到了最后一个数自然就确定了
// 所以 j <= a.length-1; 可以改为 j <= a.length-1-1;
var min = j;
for (var i = j+1; i <= a.length-1; i++){
// 因为 a[min] = a[j] 所以就可以从 j+1 开始
// 所以 i = j; 可以改为 i = j+1;
if (a[min] > a[i]){
min = i;
}
}
if (min != j){
var res = 0;
res = a[j];
a[j] = a[min];
a[min] = res;
}
}
console.log(a);
以上就是在逆战班学习到关于冒泡排序和选择排序的原理