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

鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较列里的每个元素。

它可以得到比冒泡排序稍微好一点的排序。

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,i+1);     }     right--;     for(int i = right; i > left; i--)     {       if(a[i-1] > a[i])         swap(a,i,i+1);     }     left++;   }}

分析:

以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果 使用冒泡排序则需要四次,但是在乱数序列的状态下,

鸡尾酒排序和冒泡排序效率都很差劲。

原文地址:https://www.cnblogs.com/kevin-yin/p/9395407.html

时间: 2024-10-05 05:50:10

冒泡排序的改进:鸡尾酒排序的相关文章

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

#include <iostream> using namespace std; void Cocktail(int *arr, int size){ int tail = size - 1; for(int i = 0; i < tail;){ for(int j = tail; j > i; j--){ if(arr[j] < arr[j-1]){ int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } ++i

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

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

简单排序,冒泡排序,鸡尾酒排序,快速排序

简单排序:每次找出最大(小)的数,从头开始依次排序. 1 public static int[] simplySort(int a[]) { 2 for (int i = 0; i < a.length - 1; i++) { 3 // int min = a[i]; 4 int minIndex = i; 5 for (int j =i + 1; j < a.length; j++) { 6 //我的代码 7 // if (a[j] < min) { 8 // min = a[j];

排序算法(一)——冒泡排序及改进

冒泡排序 冒泡排序的效率很低,但是算法实现起来很简单,因此很适合作为研究排序的入门算法. 基本思想 对当前还未排好序的范围内的全部数,自上而下对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒.即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换.每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序(已经排好). java实现 public class Sort{ private int [] array; public So

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

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

冒泡排序和鸡尾酒排序(code)

昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一.冒泡排序 # 冒泡排序 class BubbleSort(object): def __init__(self, data_list): self.data_list = data_list self.length = len(data_list) # 简单粗暴的排序方式 def b_sort(self): data_list = list(self.data_list) for i in range(s

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

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

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

鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都能将一个在当前数组(不包括之前排序得到的最大或者最小的数)中最小或者最大的数放在对应的位置. 算法过程 代码实现 #include <iostream> using namespace std; void Swap(int array[], int i, int j) { int temp = a

算法----(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