4. inner为3,值为9,inner+1 为4,值为7,交换,数组变为[0,1,8,7,9,6,2,3,5,4]
5, inner为4,值为9,inner+1 为5,值为6,交换,数组变为 [0,1,8,7,6,9,2,3,5,4]
6. inner为5,值为9,inner+1 为6,值为2,交换,数组变为[0,1,8,7,6,2,9,3,5,4]
7. inner为6,值为9,inner+1 为7,值为3,交换,数组变为[0,1,8,7,6,2,3,9,5,4]
8. inner为7,值为9,inner+1 为8,值为5,交换,数组变为[0,1,8,7,6,2,3,5,9,4]
9. inner为8,值为9,inner+1为9,值为4,交换,数组变为[0,1,8,7,6,2,3,5,4,9]
10. inner为9,值为9,inner+1 不符合,不交换。
2. outer为9的时候
1. inner为0,值为0,inner+1 不符合,不交换。
2. inner为1 值为1,inner+1值为8 不符合 不交换。
3. inner为2 值为8,inner+1值为7,交换,数组变为 [0,1,7,8,6,2,3,5,4,9]
4. inner为3,值为8,inner+1值为6,交换,数组变为[0,1,7,6,8,2,3,5,4,9]
5. inner为4 值为8 inner+1值为2 交换 数组变为 [0,1,7,6,2,8,3,5,4,9]
6. inner为5 值为8,inner+1值为3,交换,数组变为[0,1,7,6,2,3,8,5,4,9]
7. inner为6 值为8,inner+1值为5,交换 数组变为[0,1,7,6,2,3,5,8,4,9]
8. inner为7 值为8,inner+1值为4,交换 数组变为[0,1,7,6,2,3,5,4,8,9]
9. inner为8 值为8,inner+1值为9,不符合 不交换。
3. outer为8的时候
1. inner为0,值为0,inner+1 不符合,不交换。
2. inner为1 值为1,inner+1值为7 不符合 不交换。
3. inner为2 值为7,inner+1值为6,交换 数组变为 [0,1,6,7,2,3,5,4,8,9]
4. inner为3 值为7,inner+1值为2,交换,数组变为[0,1,6,2,7,3,5,4,8,9]
5. inner为4 值为7,inner+1值为3,交换,数组变为[0,1,6,2,3,7,5,4,8,9]
6 inner为5 值为7 inner+1值为5,交换,数组变为[0,1,6,2,3,5,7,4,8,9]
7. inner为6 值为7 inner+1 值为4,交换,数组变为[0,1,6,2,3,5,4,7,8,9]
8. inner为7 值为7,inner+1值为8,不符合。
4. outer为7的时候
1. inner为0,值为0,inner+1 不符合,不交换。
2. inner为1 值为1,inner+1值为6 不符合 不交换。
3. inner为2 值为6,inner+1值为2,交换 数组变为[0,1,2,6,3,5,4,7,8,9]
4. inner为3 值为6,inner+1值为3,交换,数组变为[0,1,2,3,6,5,4,7,8,9]
5 inner为4 值为6 inner+1值为5,交换,数组变为[0,1,2,3,5,6,4,7,8,9]
6 inner为5 值为6 inner+1值为4,交换 数组变为[0,1,2,3,5,4,6,7,8,9]
7 inner为6 值为6,inner+1 值为7,不符合。
5. outer为6的时候
1. inner为0,值为0,inner+1 不符合,不交换。
2. inner为1 值为1,inner+1值为2 不符合 不交换。
3. inner为2 值为2,inner+1值为3 不符合 不交换。
4. inner为3 值为3,inner+1值为5,不符合 不交换。
5. inner为4 值为5,inner+1 值为4 交换,数组变为[0,1,2,3,4,5,6,7,8,9]
再下面继续循环都不符合条件,所以如上就是最后一步了。这就是冒泡排序。
二:选择排序
原理:选择排序从数组的开头开始,将第一个元素和其他元素进行比较。检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续。这个过程一直进行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序。
选择排序会用到嵌套循环。外循环从数组的第一个元素移动到倒数第二个元素,内循环从第二个数组元素移动到最后一个元素,查找比当前外循环所指向的元素小的元素。每次内循环迭代后,数组中最小的值都会被赋值到合适的位置。
以下是一个对只有五个元素的列表进行选择排序的简单列子,初始列表为:
E A D H B
第一次排序会找到最小值,并将它和列表的第一个元素进行互换。
A E D H B
接下来查找第一个元素后面的最小值(第一个元素此时已经就位),并对他们进行互换。
A B D H E
D也已经就位,因此下一步会对E和H进行互换,列表已按顺序排好;
A B D E H
下面我们就可以来编写选择排序算法的selectionSort()方法了;如下代码:
function selectionSort() {
var min,temp;
for(var outer = 0; outer <= this.dataStore.length -2; ++outer) {
min = outer;
for(var inner = outer + 1; inner <= this.dataStore.length - 1; ++inner) {
if(this.dataStore[inner] < this.dataStore[min]) {
swap(this.dataStore,inner,min);
}
}
}
}
下面是所有的JS代码如下:
function CArray(numElements) {
this.dataStore = [];
this.pos = 0;
this.numElements = numElements;
this.insert = insert;
this.toString = toString;
this.clear = clear;
this.swap = swap;
this.selectionSort = selectionSort;
for(var i = 0; i < numElements.length; i++) {
this.dataStore[i] = numElements[i];
}
}
function clear() {
for(var i = 0; i < this.dataStore.length; i++) {
this.dataStore[i] = 0;