C++实现双向冒泡排序算法

C++实现双向冒泡排序算法

算法介绍

双向冒泡排序,也称为鸡尾酒排序或定向冒泡排序,是冒泡排序的改进版本。其基本思路与冒泡排序相同,不同之处在于每次排序时同时从数组两侧开始,分别向中间移动。这种方法能够更快地将大数和小数分别冒泡到数组的两端,从而减少了排序次数,提高了排序效率。

下面是双向冒泡排序的具体步骤:
1. 从左往右进行一轮冒泡排序,将最小的数排到数组的最左边;
2. 从右往左进行一轮冒泡排序,将最大的数排到数组的最右边;
3. 重复上述步骤,直到数组有序。

C++代码实现

以下是用C++语言实现双向冒泡排序算法的代码,其中参数arr为待排序的数组,参数n为数组长度。

void CocktailSort(int arr[], int n) {
    bool flag = true;
    int left = 0, right = n - 1;
    while (flag) {
        flag = false;
        // 从左往右
        for (int i = left; i < right; i++) {
            if (arr[i] > arr[i+1]) {
                swap(arr[i], arr[i+1]);
                flag = true;
            }
        }
        right--;
        // 从右往左
        for (int i = right; i > left; i--) {
            if (arr[i] < arr[i-1]) {
                swap(arr[i], arr[i-1]);
                flag = true;
            }
        }
        left++;
    }
}

示例说明

下面通过两个示例说明双向冒泡排序的具体应用。

示例1:从小到大排序

#include <iostream>
using namespace std;

int main() {
    int arr[] = {23, 56, 12, 67, 9};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "排序前:" << endl;
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    CocktailSort(arr, n);

    cout << "排序后:" << endl;
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

输出结果:

排序前:
23 56 12 67 9 
排序后:
9 12 23 56 67

示例2:从大到小排序

#include <iostream>
using namespace std;

int main() {
    int arr[] = {23, 56, 12, 67, 9};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "排序前:" << endl;
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    CocktailSort(arr, n);

    cout << "排序后:" << endl;
    for (int i = n-1; i >= 0; i--) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

输出结果:

排序前:
23 56 12 67 9 
排序后:
67 56 23 12 9

通过以上两个示例,可以看出双向冒泡排序算法对于不同的排序要求可以进行灵活的应用,并且比冒泡排序更加高效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现双向冒泡排序算法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 利用JavaScript实现的10种排序算法总结

    作为“利用JavaScript实现的10种排序算法总结”的作者,首先需要明确以下内容: 熟悉10种排序算法的原理与流程 理解JavaScript作为一门编程语言的特点和应用场景 知道如何将算法的流程用JavaScript代码实现 针对以上内容,可以采取以下步骤: 梳理10种排序算法的流程和实现方式,用markdown文本形式编写对应的标题和文本,例如: 插入…

    算法与数据结构 2023年5月19日
    00
  • JavaScript数据结构与算法之二叉树添加/删除节点操作示例

    首先让我们来介绍一下“JavaScript数据结构与算法之二叉树添加/删除节点操作示例”这个主题。 主题介绍 本主题主要介绍了在 JavaScript 中对于二叉树数据结构进行添加/删除节点操作的示例代码。二叉树是一种常见的树形结构,在计算机科学领域中被广泛应用。节点的添加与删除是该数据结构中常见的操作之一,本主题将通过示例代码,为您详细介绍操作的过程。 代…

    算法与数据结构 2023年5月19日
    00
  • C语言实现快速排序算法实例

    下面是“C语言实现快速排序算法实例”的完整攻略: 快速排序算法简介 快速排序是一种高效的排序算法,属于比较排序中的一种,采用分治策略,通过将原序列划分为若干个子序列依次排序,最终得到有序序列。该算法的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2),因此在实际应用中要根据数据规模和数据分布情况选择合适的算法。 C语言快速排序实现示例 下…

    算法与数据结构 2023年5月19日
    00
  • 详解js数组的完全随机排列算法

    详解JS数组的完全随机排列算法 1. 算法原理 完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。 算法的实现原理是: 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j 将位置i上的元素与位置j上的元素交换 经过这样的遍历,整个数组就被完全随机排列了。 2. JS代码实现 …

    算法与数据结构 2023年5月19日
    00
  • C++快速排序的分析与优化详解

    C++快速排序的分析与优化详解 前言 快速排序是一种高效的排序算法,它的时间复杂度为 $O(nlogn)$,但是在某些情况下,快排的时间复杂度会退化,导致排序时间变长。本文将对快速排序的原理、实现、优化等方面进行详细分析,帮助读者更好地理解和实现快速排序算法。 原理 快速排序的原理是基于分治法。首先从数列当中挑出一个元素,称为基准(pivot)。接着将数列中…

    算法与数据结构 2023年5月19日
    00
  • PHP常用的排序和查找算法

    PHP常用的排序和查找算法 排序算法 冒泡排序 冒泡排序是一种简单的排序算法。 它多次遍历要排序的列表,每次比较相邻的两项,如果它们的顺序错误就把它们交换过来。 示例代码如下: function bubble_sort($arr) { $len = count($arr); for($i=1; $i<$len; $i++) { for($j=0; $j…

    算法与数据结构 2023年5月19日
    00
  • Java冒泡排序法和选择排序法的实现

    Java的冒泡排序法和选择排序法都是常用的排序算法,冒泡排序法和选择排序法的原理都很简单,但是实现方法有一些区别。 冒泡排序法 冒泡排序法的原理是通过不断交换相邻的元素,比较他们的大小,将大的数不断上移或者将小的数下移,直到整个序列排好顺序。 以下是Java实现冒泡排序法的代码: public class BubbleSort { public static…

    算法与数据结构 2023年5月19日
    00
  • JS使用队列对数组排列,基数排序算法示例

    JS使用队列对数组进行排序,可以使用基数排序算法。 基数排序算法是一种非比较排序算法,通过将待排序数据按照位数切割成个、十、百、千等位,然后从低位依次向高位对每个位数进行排序。基数排序算法在排序过程中使用了队列数据结构来保存临时排序结果。 以下是基数排序算法的JavaScript实现: function radixSort(array) { const ma…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部