鸡尾酒排序Cocktail Sort (双向冒泡排序)

鸡尾酒排序

鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都能将一个在当前数组(不包括之前排序得到的最大或者最小的数)中最小或者最大的数放在对应的位置。

算法过程

代码实现

#include <iostream>

using namespace std;

void Swap(int array[], int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

void cocktailSort(int array[], int length)
{
    if (array == nullptr || length <= 0)
        return;
    int left = 0;
    int right = length - 1;
    while (left < right)
    {
        //第一次 左边开始
        for (int i = left; i < right; i++)
        {
            if (array[i] > array[i + 1])
            {
                Swap(array, i, i + 1);      //左边大于右边,交换
            }
        }
        //第二次 右边开始
        right--;
        for (int i = right; i > left; i--)
        {
            if (array[i - 1] > array[i])
                Swap(array, i - 1, i);      //左边大于右边, 交换
        }
        left++;
    }
}
int main()
{
    int arr[] = { 5,9,8,7,6 };
    int length = sizeof(arr) / sizeof(int);
    cocktailSort(arr, length);
    for (int i = 0; i < length; i++)
        cout << arr[i] << " ";
    cout << endl;
}

原文地址:https://www.cnblogs.com/izzwhf/p/11275446.html

时间: 2024-11-08 19:55:10

鸡尾酒排序Cocktail Sort (双向冒泡排序)的相关文章

经典排序算法 - 鸡尾酒排序Cocktail sort

经典排序算法 - 鸡尾酒排序Cocktail sort 鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 3 4 5 1] 第二步迭代,3 < 4不换 [2 3 4 5 1] 第三步迭代,4 < 5不换 [2 3 4 5 1] 第四步迭代,5 > 1交换 [2 3 4 1 5] 第一趟回来时的第一步,鸡尾酒一次到头后就回返回来,再到头后再过去,来回比,一个来回能排两个数字 第五步迭代,1 &l

鸡尾酒排序Cocktail sort

鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 3 4 5 1] 第二步迭代,3 < 4不换 [2 3 4 5 1] 第三步迭代,4 < 5不换 [2 3 4 5 1] 第四步迭代,5 > 1交换 [2 3 4 1 5] 第一趟回来时的第一步,鸡尾酒一次到头后就回返回来,再到头后再过去,来回比,一个来回能排两个数字 第五步迭代,1 < 5不交换 [2 3 4 1 5] 第六步迭代,1

[golang] 数据结构-鸡尾酒排序

吐个槽又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理鸡尾酒排序(Cocktail Sort)是冒泡排序的一种优化算法.原本的冒泡排序只能在一轮中挑出一个值移动到最后,而鸡尾酒则可以在一轮里挑最大的移到最后,再挑最小的移到最前面.实际上就是先正向进行一轮普通的冒泡排序,然后再逆向进行一轮反向冒泡,每轮冒泡都缩小一点范围. 复杂度最好情况是正序排列的数列O(n),最坏情况是逆序O(n^2),平

冒泡排序的改进:鸡尾酒排序

鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进.此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较列里的每个元素. 它可以得到比冒泡排序稍微好一点的排序. void CocktailSort(int *a , int n){ int left = 0; int right = n - 1; while(left < right) { for(int i = left; i < right; i++) { if(a[i] > a[i+1]) swap(a,i

Hark的数据结构与算法练习之鸡尾酒排序

算法说明 鸡尾酒排序又叫定向冒泡排序,鸡尾酒搅拌排序,搅拌排序,涟漪排序,回来排序,快乐小时排序. 鸡尾酒排序是交换排序的一种,它是冒泡排序的一个轻微的变种.冒泡是从低向高比较排序,鸡尾酒从低向高,从高向低交换着进行排序.大家看一下代码就知道了. 某些特殊有序数组情况下,鸡尾酒排序是效率略好于冒泡排序,例如: int[] arrayData = { 2, 3, 4, 5, 6, 7, 8, 9, 1 }; 鸡尾酒排序只排序一次就能出结果,而冒泡排序就需要8次才能出结果. 代码 使用的是java

算法----(2)鸡尾酒排序

鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进.此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素.他可以得到比冒泡排序稍微好一点的效能. python代码: 1 def bubble_sort_pro(num_array): 2 flag = True 3 for i in range(len(num_array)//2): 4 if flag: 5 flag = False 6 #将最大值排到队尾 7 for j in range(i, len

排序算法总结——冒泡排序与鸡尾酒排序

1. 冒泡排序 冒泡排序(bubble sort),是一种基础的交换排序.基本思想是,把相邻的元素两辆进行比较,当一个元素大于右侧相邻元素时,交换它们的位置:当一个元素小于或等于右侧相邻元素时,位置不变. 冒泡排序是一种稳定排序,值相等的元素并不会打乱原本的顺序.由于该排序算法每一轮都要遍历所有元素,总共遍历(元素数量-1)轮,平均时间复杂度为O(n2). 升级版1: 对于序列的后半部分已经是有序的情况,如果能判断出有序,并作出标记,那么剩下的几轮排序就不必执行了.利用bool变量isSorte

鸡尾酒排序(双冒泡排序、搅拌排序或涟漪排序)

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Sort { class CockTailSorter { private static int[] myArray; private static int arraySize; public static int[] Sort(int[] myArray) { arraySize = myArray.Len

排序算法系列:冒泡排序与双向冒泡排序

概述 排序算法应该算是一个比较热门的话题,在各个技术博客平台上也都有一些博文进行了一定程度的讲解.但还是希望能从自我完善的角度出发,可以更详细.全面.形象地表达这些算法的精髓.本文就先从最简单的冒泡排序开始说起,别说你已经彻底了解了冒泡排序算法(虽然一开始我也是这样以为的). 版权说明 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/50474230 – Coding-Naga - 转载请注明出处 目录 概述 版权说明 目录 冒