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日

相关文章

  • c语言快速排序算法示例代码分享

    首先,我们需要了解什么是快速排序。快速排序(QuickSort)是一种排序算法,其采用了分治的思想,并使用递归的方式处理数据集合。它的基本思想是从待排序的数据集合中选择一个元素作为分界点(一般称为pivot),然后将小于pivot的元素放到pivot左边,大于pivot的元素放到pivot右边,最后将pivot放到中间位置。然后递归处理pivot左右两边的子…

    算法与数据结构 2023年5月19日
    00
  • Python实现堆排序案例详解

    Python实现堆排序案例详解 堆排序简介 堆排序是一种基于树形数据结构的排序算法,它的时间复杂度为 O(nlogn),堆排序分为大根堆和小根堆,当堆为大根堆时,堆中每个节点的值都大于或等于其孩子节点的值,当堆为小根堆时,堆中每个节点的值都小于或等于其孩子节点的值。 堆的基本概念 堆是一种完全二叉树,它可以用数组来表示,数组下标从 1 开始,对于下标为 i …

    算法与数据结构 2023年5月19日
    00
  • Java快速排序案例讲解

    Java快速排序案例讲解 快速排序(Quicksort)是一种常见的排序算法,它的时间复杂度为O(nlogn),是一种效率较高的排序算法,在实际开发中也广泛应用。本文将介绍Java快速排序的实现过程以及具体实现。 快速排序介绍 快速排序是通过选择一个“基准数”,然后把整个数组分成两部分,分别为小于等于“基准数”的部分和大于“基准数”的部分。然后再对这两个部分…

    算法与数据结构 2023年5月19日
    00
  • js算法中的排序、数组去重详细概述

    JS算法中的排序、数组去重详细概述 排序算法 在JavaScript中,常用的排序算法有冒泡排序、插入排序、选择排序、快速排序等。下面将分别对他们进行介绍。 冒泡排序 冒泡排序是一种稳定的排序算法,它的基本思想是从左到右依次比较相邻两个元素的大小,并且将较大的元素向右移动,较小的元素向左移动。重复这个过程直到没有任何元素需要移动为止。 下面是冒泡排序的Jav…

    算法与数据结构 2023年5月19日
    00
  • C语言完整实现12种排序算法(小结)

    C语言完整实现12种排序算法(小结) 本文主要介绍了C语言实现12种排序算法的详细过程以及相关示例。 排序算法的分类 排序算法可分为内部排序和外部排序。内部排序是指将待排序的数据全部加载到内存中进行排序,而外部排序是指在数据量过大时需要将数据分块,对每一块数据进行排序,最后将各个块合并起来,得到有序的结果。 在内部排序中,常用的排序算法大致可分为以下几类: …

    算法与数据结构 2023年5月19日
    00
  • C语言库函数qsort及bsearch快速排序算法使用解析

    这里是关于C语言库函数qsort及bsearch快速排序算法使用的详细攻略。 qsort排序函数 1. 定义 qsort是C语言标准库中快速排序算法的一个实现函数。它用于对一个数组中的元素进行排序。qsort函数的定义如下: void qsort(void* base, size_t nitems, size_t size, int (*compar)(co…

    算法与数据结构 2023年5月19日
    00
  • PHP常见数组排序方法小结

    PHP常见数组排序方法小结 PHP的数组是一种非常有用的数据结构。当我们需要对数组进行排序时,PHP提供了许多常见的排序方法,包括冒泡排序、选择排序、插入排序、快速排序等,本文将对这些排序方法进行简要介绍和示例说明。 冒泡排序 冒泡排序是一种常见的排序方法,它的基本思想是:对相邻的元素进行比较,如果顺序不正确就交换。这个过程会持续到整个数组都有序为止。 fu…

    算法与数据结构 2023年5月19日
    00
  • 堆排序算法(选择排序改进)

    堆排序算法是一种基于二叉堆的选择排序改进算法。它利用了二叉堆的特点,可以将排序时间降至O(nlogn)级别。下面我们来详细讲解它的完整攻略。 基本思路 将待排序的序列构建成一个最大堆。 将堆顶的元素(即当前最大元素)跟数组最后一个元素交换位置,然后将剩余的元素进行堆调整,使其满足最大堆的要求。 重复步骤2,直至排序完成。 步骤详解 1. 构建最大堆 对于一个…

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