交换排序
冒泡排序
算法思想,每一轮排序(从小到大),从后往前遍历比较,把最小值一步步交换到相应的位置。
时间复杂度: n(n-1)/2
冒泡排序算法的优化改进 - Coding 的文章 - 知乎
https://zhuanlan.zhihu.com/p/51479010
从前往后遍历
1 2 3 4 5 6 7 8 9 10 11 12 13
| function bubbleSort(nums) { for (let i = 0; i < nums.length - 1; i++) { for (let j = 0; j < nums.length - i - 1; j++) { if (nums[j] > nums[j + 1]) { let temp = nums[j + 1]; nums[j + 1] = nums[j]; nums[j] = temp; } } } console.log(nums.slice()); }
|
从后往前遍历
1 2 3 4 5 6 7 8 9 10 11 12
| function bubbleSort(nums) { for (let i = 0; i < nums.length; i++) { for (let j = nums.length - 1; j > i; j--) { if (nums[j] < nums[j - 1]) { let temp = nums[j - 1]; nums[j - 1] = nums[j]; nums[j] = temp; } } } console.log(nums); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| function floatSortTow(nums) {
let done = false; let compare_count = 0; let round = 0;
let length = nums.length; while (!done) { done = true; for (let i = 0; i < length - 1; i++) { compare_count++;
if (nums[i] > nums[i + 1]) { nums[i] = nums[i] ^ nums[i + 1]; nums[i + 1] = nums[i] ^ nums[i + 1]; nums[i] = nums[i] ^ nums[i + 1]; done = false; } } length--; console.log("第%d趟:%o", ++round, ...nums); } console.log("一共比较了%d次", compare_count); console.log(nums); }
floatSortTow([2, 7, 3, 1, 3, 1, 1, 9]);
|
冒泡排序优化要点:
- 减少排序比较次数
- 已经排好的,就不必要再排了,设置标识.