排序数组:[5, 4, 6, 3, 8, 1, 7, 2, 10, 9]
描述:当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
排序图解:
下面是一步一步的演化过程,可以直接复制代码,进行运行,查看结果:
const arr = [5, 4, 6, 3, 8, 1, 7, 2, 10, 9]
//找到第一个最大值,如图中的第一次排序
function sort1(arr) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
//当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
return arr
}
console.log(sort1(arr))
//打印结果为:[4, 5, 3, 6, 1,7, 2, 8, 9, 10]
//因为要找到数组的每一个最大值.所有,要对当前数组的所有的值进行排序,所以在sort1上演变
function sort2(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
//当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr
}
console.log(sort2(arr))
//打印结果为:[1, 2, 3, 4, 5,6, 7, 8, 9, 10]
//sort2已经可以排序了。但是,之前已经排好序的可以不用在排序的,所以每一次排序的长度为当前长度减去排过序的长度,可以在sort2上演变
function sort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr
}
console.log(sort(arr))
//打印结果为:[1, 2, 3, 4, 5,6, 7, 8, 9, 10]