冒泡排序
冒泡排序是由两个for循环构成,第一个for循环的变量 j 表示总共需要多少轮比较,第二个for循环的变量 i 表示每轮参与比较的元素下标【0,1,…,length-i】, 因为每轮比较都会出现一个最大值放在最右边,所以每轮比较后的元素个数都会少一个,这也是为什么 j 的范围是逐渐减小的。相信大家理解之后快速写出一个冒泡排序并不难。
let aa = [4, 2, 8, 9, 5, 7, 6, 1, 3];
先声明一个待排序的数组
function bubbleSort() {
var m = 0;
for (let j = 1; j < aa.length - 1; j++) {
let flag = true;
for (let i = 0; i < aa.length - 1; i++) {
var bb = null;
if (aa[i] > aa[i + 1]) {
bb = aa[i];
aa[i] = aa[i + 1];
aa[i + 1] = bb;
flag = false;
}
m++;
}
if (flag) {
break;
}
// 第 i轮排序的结果为
console.log("第" + j + "轮排序后的结果为:" + aa);
}
console.log('冒泡共运行' + m + '次');
}
bubbleSort();
选择排序
- 从待排序序列中,找到关键字最小的元素
- 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换
- 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束
// selectSort();
function selectSort() {
var m = 0;
for (var j = 0; j < aa.length - 1; j++) {
var min = j;
for (var i = j + 1; i < aa.length; i++) {
//拿着本次运行到的最小值去跟剩余的值做对比
if (aa[i] < aa[min]) {
min = i;
}
m++;
}
if (j != min) {
var bb = aa[min];
aa[min] = aa[j];
aa[j] = bb;
}
console.log("第" + j + "轮排序后的结果为:" + aa);
}
console.log('选择排序共运行' + m + '次')
}
插入排序
- 每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。(依次与前边排好队的参数比较 需要比较的current_i与 其前边的数据一一对比 如果比其小 则插入)
function insertSort() {
var m = 0;
for (var j = 1; j < aa.length; j++) {
var tmp = aa[j];
var i = j;
while (i > 0 && tmp < aa[i - 1]) {
aa[i] = aa[i - 1];
i--;
m++;
}
aa[i] = tmp;
console.log("第" + j + "轮排序后的结果为:" + aa);
}
console.log(aa);
console.log('插入排序共运行' + m + '次')
};
insertSort();