冒泡排序:
主要思想:两两进行比较+值交换,像冒泡一样
以下为我的思路:
关于冒泡排序:(以升序为例子)
从第一个开始,相邻的两个数进行比较
若第一个大一第二个,则进行交换
以此类推、、、、、
从上面我们不难看出,冒泡排序其实就是一个双层for循环
冒泡排序的外层循环控制的是需要进行冒泡的次数,关于如何确定冒泡的次数,当我们数组一共有n项时,那我们就有n-1项需要去进行冒泡。最后一项不需要进行冒泡。
内层循环是控制在一个冒泡周期内,需要进行的比较次数,还是当我们的数组有n项,当我们的第一项开始排序时,他需要和n-1项进行比较,第二项需要和n-2项进行比较。。。。以此类推。
function maopao(arr) {
let len = arr.length;
let temp = 0;
// 外层循环表示冒泡次数
for (let i = 0; i < len - 1; i++) {
//内层循环表示比较次数
for (let j = 0; j < len - 1 - i; j++) {
// 判断,相邻的两个数进行比较,
// 若要改变排列的顺序,只需改变判断条件的大于和小于号即可
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
// 降序排列
function maopaojiangxu(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
let temp = 0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
// 打印数组函数
function pointarr(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
document.write(arr[i] + ' ');
}
}
let arr1 = [89, 23, 56, 87, 54, 12, 99, 76, 34, 22]
console.log(maopao(arr1));
pointarr(maopao(arr1));
document.write('<br>');
console.log(maopaojiangxu(arr1));
pointarr(maopaojiangxu(arr1));
输出的结果为:
关于如何该改变排序方向,我们只需要在判断的时候更改一下'>'或'<'
选择排序
选择排序思想:直接选出最大或最小然后依次排列。
首先在数组中选择最小的数与第一个进行交换
已经确定了数组的第一个元素,然后剩下的数组元素中寻找最小的数与第二个数进行交换
以此类推。。。进行排列
如需要改变排序方式秩序哟改变内层循环的判断即可。
function xuanze(arr) {
var len = arr.length;
// 外层循环控制
for (let i = 0; i < len; i++) {
// let temp = arr[i];
let min = i;
for (let j = i; j < len; j++) {
//寻找数组的最小元素并记录最小数字的下标
if (arr[min] > arr[j]) {
min = j;
}
}
// 进行交换
// 方法一
[arr[i], arr[min]] = [arr[min], arr[i]];
// 方法二
// arr[i] = arr[min];
// arr[min] = temp;
}
return arr;
}
function pointarr(arr) {
for (let a = 0; a < arr.length; a++) {
document.write(arr[a] + ' ');
}
}
let arr1 = [89, 23, 56, 87, 54, 12, 99, 76, 34, 22]
console.log(xuanze(arr1));
pointarr(xuanze(arr1));
输出结果为: