鸡尾酒排序Cocktail Sort

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

** 理解 **

还是以a=[12,25,5,13,21,37]为例 第1轮:
1.[<u>12,25,</u>5,13,21,37]--a[0]=12与a[1]=25比较-->[12,25,5,13,21,37]
2.[12,<u>25,5,</u>13,21,37]--a[1]=25与 a[2]= 5比较-->[12,5,25,13,21,37]
3.[12,5,<u>25,13,</u>21,37]--a[2]=25与a[3]=13比较-->[12,5,13,25,21,37]
4.[12,5,13,<u>25,21,</u>37]--a[3]=25与a[4]=21比较-->[12,5,13,21,25,37]
5.[12,5,13,21,<u>25,37</u>]--a[4]=25与a[5]=37比较-->[12,5,13,21,25,37]
6.[12,5,13,<u>21,25,</u>37]--a[4]=25与a[3]=21比较-->[12,5,13,21,25,37]
7.[12,5,<u>13,21,</u>25,37]--a[3]=21与a[2]=13比较-->[12,5,13,21,25,37]
8.[12,<u>5,13,</u>21,25,37]--a[2]=13与 a[1]= 5比较-->[12,5,13,21,25,37]
9.[<u>12,5,</u>13,21,25,37]-- a[1]= 5与a[0]=12比较-->[5,12,13,21,25,37]
第1轮即排序完成,可设置标志位,若某1轮来回没有一次交换,即排序结束。

Python代码

def cocktail_sort(array):
    length=len(array)
    for i in range(length//2): #每一轮来回,只需冒泡排序的一半
        #每一轮后,都会除去开头和结尾两个元素,最小最大在开头和结尾
        for j in range(i,length-1-i): #从开头到结尾
            if array[j]>array[j+1]: 
                array[j],array[j+1]=array[j+1],array[j]
        for k in range(length-2-i,i,-1): #从倒数第二个数到开头第二个数
            if array[k]<array[k-1]:
                array[k],array[k-1]=array[k-1],array[k]
    return array

if __name__ == '__main__':
    array=[12,25,5,13,21,37]
    print(cocktail_sort(array))

结果
[5, 12, 13, 21, 25, 37]

加上打印函数,看看比较过程

def cocktail_sort(array):
    length=len(array)
    for i in range(length//2):
        for j in range(i,length-1-i):
            if array[j]>array[j+1]:
                print("a[%s] a[%s]比较" %(j,j+1),end=' ')
                print('第%s轮 第%s次' %(i+1,j+1),end=':')
                print(array,end='--->')
                array[j],array[j+1]=array[j+1],array[j]
                print(array)
            else:
                print("a[%s] a[%s]比较" %(j,j+1),end=' ')
                print('第%s轮 第%s次' %(i+1,j+1),end=':')
                print(array,end='--->')
                print(array)
        for k in range(length-2-i,i,-1):
            if array[k]<array[k-1]:
                print("a[%s] a[%s]比较" %(k,k-1),end=' ')
                print('第%s轮 第n次' %(i+1),end=':')
                print(array,end='--->')
                array[k],array[k-1]=array[k-1],array[k]
                print(array)
            else:
                print("a[%s] a[%s]比较" %(k,k-1),end=' ')
                print('第%s轮 第n次' %(i+1),end=':')
                print(array,end='--->')
                print(array)
    return array

if __name__ == '__main__':
    array=[12,25,5,13,21,37]
    print(array)
    print(cocktail_sort(array))


[12, 25, 5, 13, 21, 37]
a[0] a[1]比较 第1轮 第1次:[12, 25, 5, 13, 21, 37]--->[12, 25, 5, 13, 21, 37]
a[1] a[2]比较 第1轮 第2次:[12, 25, 5, 13, 21, 37]--->[12, 5, 25, 13, 21, 37]
a[2] a[3]比较 第1轮 第3次:[12, 5, 25, 13, 21, 37]--->[12, 5, 13, 25, 21, 37]
a[3] a[4]比较 第1轮 第4次:[12, 5, 13, 25, 21, 37]--->[12, 5, 13, 21, 25, 37]
a[4] a[5]比较 第1轮 第5次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[4] a[3]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[3] a[2]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[2] a[1]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[12, 5, 13, 21, 25, 37]
a[1] a[0]比较 第1轮 第n次:[12, 5, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[1] a[2]比较 第2轮 第2次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[3]比较 第2轮 第3次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[3] a[4]比较 第2轮 第4次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[3] a[2]比较 第2轮 第n次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[1]比较 第2轮 第n次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
a[2] a[3]比较 第3轮 第3次:[5, 12, 13, 21, 25, 37]--->[5, 12, 13, 21, 25, 37]
[5, 12, 13, 21, 25, 37]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容

  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 2,553评论 0 13
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 18,783评论 1 19
  • 冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法。它重复地走访过要排序的...
    ShortLife阅读 366评论 0 0
  • 《夏日送别》 孤疯 你的微笑是出水的芙蓉, 洁白无瑕中不惧烈日当空。 谢谢你微笑着送我离去, 离开...
    似峰上风已疯阅读 142评论 0 0
  • 才从北京回来,跟老公一起出差,他出差,我在北京玩。五天,把俩孩子丢给她爷爷奶奶。 临出门时,公公还说 今年去 的地...
    美丽selina阅读 526评论 10 1