📜  鸡尾酒排序的C++程序(1)

📅  最后修改于: 2023-12-03 15:12:57.080000             🧑  作者: Mango

鸡尾酒排序(Cocktail Sort)的C++程序

介绍

鸡尾酒排序是一种冒泡排序的变形,也被称为双向冒泡排序。它的原理是先进行从左到右的冒泡排序,然后再进行从右到左的冒泡排序,以此类推,直到排序完成。

相比于冒泡排序,鸡尾酒排序可以在一定程度上避免大量的无用扫描,因此可以提高排序效率。

以下是鸡尾酒排序的C++程序代码:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void cocktailSort(vector<int>& arr){
    int n = arr.size();
    bool swapped = true;
    int start = 0;
    int end = n - 1;
  
    while (swapped) {
        swapped = false;
  
        for (int i = start; i < end; ++i) {
            if (arr[i] > arr[i + 1]) {
                swap(arr[i], arr[i + 1]);
                swapped = true;
            }
        }
  
        if (!swapped) {
            break;
        }
  
        swapped = false;
  
        --end;
  
        for (int i = end - 1; i >= start; --i) {
            if (arr[i] > arr[i + 1]) {
                swap(arr[i], arr[i + 1]);
                swapped = true;
            }
        }
  
        ++start;
    }
}

int main() {
    vector<int> arr = { 64, 34, 25, 12, 22, 11, 90 };
    cocktailSort(arr);
  
    cout << "Sorted array: \n";
    for (int i = 0; i < arr.size(); i++)
        cout << arr[i] << " ";
    cout << endl;
    return 0;
}
分析

在这个程序中,我们首先定义了一个函数cocktailSort,它接收一个整数类型的向量数组作为参数。

函数中,我们首先定义变量n来存储输入数组的长度,接着定义了一个布尔类型的变量swapped,用来判断是否已经完成所有排序操作。然后,我们又定义了变量startend,分别表示当前排序的起始位置和终止位置。

在第一个while循环中,我们首先进行了从左到右的冒泡排序,如果在遍历完整个数组后没有发生交换操作,那么说明数组已经全部排序完成,因此可以退出循环。

在第二个while循环中,我们进行了从右到左的冒泡排序,同样,如果在遍历完整个数组后没有发生交换操作,那么说明数组已经全部排序完成,因此可以退出循环。

在函数体的最后,我们调用了函数main,并在其中定义了一个含有7个元素的向量数组,并对该数组进行鸡尾酒排序。最后,我们输出了排序后的数组。

总结

鸡尾酒排序是一种优秀的排序算法,特别适用于需要排序的元素数量较少的情况。在实际的开发过程中,我们可以根据需要将它应用到数组、链表、文件等不同的数据结构中,以获得更优秀的排序效果。同时,我们也可以通过多种方式优化该算法,如减少冒泡排序的循环次数、采用双向链表等,都可以在一定程度上提升该算法的排序效率。