网站建设与管理专业就业方向,爱南宁app下载二维码,做网站需要学习哪些,网站建设开发费会计处理双端冒泡排序是对传统冒泡排序的改进#xff0c;其主要改进在于同时从两端开始排序#xff0c;相对于传统冒泡排序每次只从一端开始排序#xff0c;这样可以减少排序的遍历次数。
传统冒泡排序从一端开始#xff0c;每次将最大#xff08;或最小#xff09;的元素冒泡到…双端冒泡排序是对传统冒泡排序的改进其主要改进在于同时从两端开始排序相对于传统冒泡排序每次只从一端开始排序这样可以减少排序的遍历次数。
传统冒泡排序从一端开始每次将最大或最小的元素冒泡到序列的一端然后再从剩余的元素中继续冒泡。这个过程需要进行 n-1 次遍历每次遍历需要比较相邻的元素并进行交换。
而双端冒泡排序则从序列的两端同时开始同时将最大和最小的元素冒泡到序列的两端然后再缩小序列的范围继续从两端开始冒泡。这样在一次遍历中可以确定两个边界的正确位置从而减少了排序的遍历次数。
总体上来说双端冒泡排序减少了比较和交换的次数从而相对于传统冒泡排序有更好的性能。然而双端冒泡排序的时间复杂度仍然是 O(n^2)因此对于大规模数据集仍然不是最优选择。但在某些特定情况下双端冒泡排序可能比传统冒泡排序略快一些。
class Solution {
public:void swap(int a, int b) {int tmp a;a b;b tmp;}vectorint sortArray(vectorint nums) {int left 0;int right nums.size() - 1;bool flag true;while(left right flag) {for (int i left; i right - 1; i) {if (nums[i] nums[i1]) {swap(nums[i], nums[i1]);flag true;}}left;for (int i right; i left; i--) { // 注意这个边界条件这里不会越界if (nums[i-1] nums[i]) {swap(nums[i-1], nums[i]);flag true;}}right--;}return nums;}
};