`

鸡尾酒排序算法

阅读更多

鸡尾酒排序,也就是定向冒泡排序鸡尾酒搅拌排序搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

#include<stdio.h>    
#include<string.h>   
#include<math.h>   
#include<ctype.h>   
#include<stdbool.h>  

void swap(int *a, int *b)   //交换两元素的值
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}

void printArray(int a[], int count)   //打印数组元素
{
    int i;
    for(i=0; i<count; i++)
        printf("%d ",a[i]);
    printf("\n");
}

void cocktail_sort(int a[], int size){    //数组中的第一个数为0索引
    int i,bottom = 0;
    int top = size - 1;
    bool swapped = true; 
    while(swapped)    //假如没有元素交换,则数组有序
    {
        swapped = false; 
        for(i = bottom; i < top; i++)
        {
            if(a[i] > a[i + 1])      //判断两个元素是否正确的顺序
            {
                swap(&a[i], &a[i + 1]);     //让两个元素交换顺序
                swapped = true;
            }
        }
        // 将未排序部分的最大元素交换到顶端
        top = top - 1; 
        for(i = top; i > bottom; i--)
        {
            if(a[i] < a[i - 1]) 
            {
                swap(&a[i], &a[i - 1]);
                swapped = true;
            }
        }
        //将未排序部分的最小元素交换到底端
        bottom = bottom + 1;  
    }
}

int main(void)   
{
    int a[]={3, 5, 4, 6, 9, 7, 8, 0, 1};
    int n=sizeof(a)/sizeof(*a);
    printArray(a,n);
    cocktail_sort(a,n);
    printArray(a,n);
    return 0;
}

 

分享到:
评论

相关推荐

    易语言鸡尾酒排序

    鸡尾酒排序,又称 bidirectional bubble sort 或 cocktail sort,是一种基于冒泡排序的优化算法。在冒泡排序中,元素是按照从最小到最大的顺序逐渐“浮”到数组的前端,而鸡尾酒排序则通过从一端到另一端来回遍历...

    c++鸡尾酒排序算法yu

    鸡尾酒排序,也称为双向冒泡排序...总的来说,鸡尾酒排序是一种简单且直观的排序算法,适用于小规模数据的排序。在实际应用中,更高效的排序算法如快速排序、归并排序和堆排序等更常见,它们具有更好的平均时间复杂度。

    算法-理论基础- 排序- 鸡尾酒排序(包含源程序).rar

    在压缩包中的源程序,很可能是用某种编程语言(如C、C++、Python等)实现的鸡尾酒排序算法,通过阅读和理解这些代码,你可以直观地看到排序过程的逻辑,并学习如何将理论知识转化为实际的编程操作。对于初学者来说,...

    java数据结构算法 冒泡 选择 鸡尾酒 插入 快速 排序算法

    本资源包涵盖了五种常见的排序算法:冒泡排序、选择排序、鸡尾酒排序(又称双向冒泡排序)、插入排序以及快速排序。这些排序算法在实际编程中有着广泛的应用,尤其是在处理大量数据时,了解并熟练掌握它们的原理和...

    冒泡排序改进算法 /鸡尾酒算法

    但是,这并不意味着鸡尾酒排序在所有情况下都优于其他高级排序算法,如快速排序、归并排序或堆排序,这些算法在处理大数据集时通常表现出更好的性能。 在实际应用中,选择合适的排序算法应根据数据的特点和需求来...

    java交换排序之鸡尾酒排序实现方法

    总的来说,鸡尾酒排序是一种实用的排序算法,尤其是在处理接近有序的序列时。虽然其时间复杂度在最坏情况下与冒泡排序相同,但实际应用中通常表现更好,因为它能更有效地利用双向扫描的优势。在Java编程中,我们可以...

    易语言鸡尾酒排序源码-易语言

    鸡尾酒排序,又称“震波排序”或“摇摆排序”,是一种变种的冒泡排序算法。在易语言中实现鸡尾酒排序,可以帮助初学者深入理解排序算法的原理和易语言编程技巧。易语言作为一款中国自主研发的编程语言,以其独特的...

    十大基本排序,堆排序,归并排序,鸡尾酒排序,计数排序,基数排序等

    鸡尾酒排序是冒泡排序的一个变种,它不仅从左向右比较和交换相邻元素,还从右向左进行一次遍历。这种双向遍历的方式有助于减少数据的移动次数。 #### C++ 实现 `Cocktail`函数实现了鸡尾酒排序的基本逻辑。 ```...

    c#冒泡,选择,鸡尾酒,插入,希尔等排序方法

    本资源集成了五种经典的排序算法:冒泡排序、选择排序、鸡尾酒排序(也称作双向冒泡排序)、插入排序以及希尔排序。以下是对这些排序方法的详细说明: 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,通过重复...

    排序算法总结

    【排序算法总结】 排序算法是计算机科学中基础且重要的算法之一,它们用于组织和整理数据,使其按照特定的顺序排列。在IT领域的面试中,掌握各种排序算法的原理和实现方式是十分必要的。以下是几种常见的排序算法的...

    经典算法的C#源码实现

    经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳...

    CockSort_hidden1yi_C#_

    以下是一个简单的C#鸡尾酒排序算法的实现示例: ```csharp public static void CocktailSort(int[] arr) { int left = 0; int right = arr.Length - 1; while (left ) { // 升序遍历 for (int i = left; i ;...

    排序算法 各种算法的综合

    比如鸡尾酒排序(双向冒泡排序)或者插入排序的变体等,虽然效率可能低于O(N²),但它们的思路可能启发新的优化方法。 4. **通用快速排序**:这部分介绍了一个基于模板的快速排序实现,它可以对任何数据类型进行...

    c#实现基本排序算法

    本文将详细探讨C#语言中实现的几种基本排序算法,包括冒泡排序、鸡尾酒排序(双向冒泡)、选择排序、插入排序、希尔排序、堆排序和归并排序。 首先,我们来看**冒泡排序**,它是最简单的排序算法之一。通过不断交换...

    基于Python的冒泡排序算法详解与优化

    内容概要:本文详细介绍了冒泡排序算法的基本概念及其Python代码实现,重点解释了算法的基本步骤,以及常见的优化手段,如设置标志位和鸡尾酒排序。冒泡排序的时间复杂度为O(n²),适用于小规模的数据排序。 适用...

    常用排序算法总结

    鸡尾酒排序是对冒泡排序的一种改进,其不仅能够从前向后比较和交换元素,还可以从后向前进行同样的操作,因此又称为双向冒泡排序。 **特点与应用:** - **时间复杂度:** 同冒泡排序一样,平均和最坏情况下为 O(n^2)...

    算法,Python.zip

    O(n+k)来源维基百科鸡尾酒调酒器鸡尾酒摇床排序,也称为双向冒泡排序、鸡尾酒排序、摇床排序(也可以指选择排序的一种变体)、波纹排序、洗牌排序或穿梭排序,是冒泡排序的一种变体,既是一种稳定排序算法,也是一种...

    c++实现12个排序算法以及时间比较

    鸡尾酒排序是双向冒泡排序,它从两端向中间交替进行,先从左向右,然后从右向左,使得较小的元素逐渐向左移动,较大的元素向右移动。时间复杂度也为O(n²)。 12. **斯坦纳树排序(Steiner Tree Sort)** 斯坦纳树...

    常用排序算法介绍_示例程序|排序算法_程序.rar

    12. **堆排序的变种:**如鸡尾酒排序(双向冒泡排序)、 gnome sort(园丁排序)等。 13. **图解排序**:如Timsort,是Python等语言内置的排序算法,结合了插入排序和归并排序的特点,对已部分有序的数据表现优秀。...

Global site tag (gtag.js) - Google Analytics