一、图解排序过程
注意:比较次数和交换次数之所以不一致,是因为:比较了并不一定就需要交换两个数字的位置,比如比较 1 和 2两个数字,由于 后者本身就比前者大,所以不需要交换两者的位置。
二、代码实现
三、完整代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>// 创建列表类function ArrayList() {// 属性this.array = []// 方法// 将数据可以插入到数组中的方法ArrayList.prototype.insert = function (item) {this.array.push(item)}ArrayList.prototype.toString = function () {return this.array.join('-')}// 交换两个位置的数据ArrayList.prototype.swap = function (m, n) {var temp = this.array[m]this.array[m] = this.array[n]this.array[n] = temp}// 实现排序算法// 冒泡排序ArrayList.prototype.bubbleSort = function () {// 1.获取数组的长度var length = this.array.length// 2.反向循环,因此次数越来越少for (var j = length - 1; j >= 0; j--) {// 第一次进来: i = 0, 比较 0 和 1 位置的两个数据,如果0位置大于 1位置的数据 交换两个的位置// 最后一次进来:i = length - 2, 比较length - 2 和 length - 1 的两个数据// 3.根据i的次数,比较到i的位置for (var i = 0; i < j; i++) {if (this.array[i] > this.array[i + 1]) {// 4.如果 i 位置比 i+1 位置的数据大,就交换位置// 前一个数字 > 后一个数字, 两者交换位置this.swap(i, i + 1)}}}}// 选择排序// 插入排序// 希尔排序// 快速排序}// 测试var list = new ArrayList()// 插入元素list.insert(66)list.insert(88)list.insert(12)list.insert(87)list.insert(100)list.insert(5)list.insert(566)list.insert(23)alert(list)// 验证冒泡排序list.bubbleSort()alert(list)
</script>
</body>
</html>