zoukankan      html  css  js  c++  java
  • 数据结构&算法实践—【排序|交换排序】奇偶排序

    转载请注明出处:http://blog.csdn.net/wklken

    回主目录


    排序>>交换排序>>奇偶排序

    List:

    0.概念+伪代码+示例分析

    1.奇偶排序实现

    2.Question

    3.后续扩展


    o start

    基本概念:

    维基百科http://zh.wikipedia.org/wiki/%E5%A5%87%E5%81%B6%E6%8E%92%E5%BA%8F


    伪代码:

    function odd_even(A: list[1..n]){  
         whie has_swap:
            for i from 0 to n-1 && i%2==0 && i+1<=n-1{
                   if(A[i] > A[i+1])
                      swap(A[i], A[i+1])
            }
            for j from 1 to n-1 && j%2==1 && j+1<=n-1{
                   if(A[j] > A[j+1])
                       swap(A[j], A[j+1])
            }
    }  
    

    奇偶排序

    类似于冒泡排序,冒泡排序并行化的版本()

    简单但效率不高


    每一轮存在两次排序:奇数排序(下标奇数与其邻居比较&交换),偶数排序(下标偶数与其邻居比较交换)

    直到不存在数据交换


    示例:

    [50, 10, 30, 20, 40, 60]

    第一轮 偶数排序
    cmp 50 10
    change [10, 50, 30, 20, 40, 60]
    cmp 30 20
    change [10, 50, 20, 30, 40, 60]
    cmp 40 60
    odd range [10, 50, 20, 30, 40, 60]

    第一轮 奇数排序
    cmp 50 20

    change [10, 20, 50, 30, 40, 60]
    cmp 30 40
    even range [10, 20, 50, 30, 40, 60]

    第二轮 偶数排序
    cmp 10 20

    cmp 50 30
    change [10, 20, 30, 50, 40, 60]
    cmp 40 60
    odd range [10, 20, 30, 50, 40, 60]

    第二轮 奇数排序
    cmp 20 30

    cmp 50 40
    change [10, 20, 30, 40, 50, 60]
    even range [10, 20, 30, 40, 50, 60]

    第三轮 不存在数据交换
    cmp 10 20

    cmp 30 40
    cmp 50 60
    odd range [10, 20, 30, 40, 50, 60]
    cmp 20 30
    cmp 40 50
    even range [10, 20, 30, 40, 50, 60] #到这里,无数据交换,结束
    [10, 20, 30, 40, 50, 60]


    1. start 


    def oddeven_sort(l):
        odd_range = range(0,len(l)-1,2)
        even_range = range(1,len(l)-1,2)
        sign = 1
        while sign:
            sign = 0
            for i in odd_range:
                if l[i] > l[i+1]:
                    l[i], l[i+1] = l[i+1],l[i]
                    sign = 1
            for j in even_range:
                if l[j] > l[j+1]:
                    l[j], l[j+1] = l[j+1], l[j]
                    sign = 1
        print l 
    

    2 start

    A.奇偶排序概念,过程描述?

    B. 时间复杂度?空间复杂度?是否是稳定排序?


    3 start

    后续扩展——Batcher奇偶归并排序(后面实现)



    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    Js--Array类型1
    利用js生成一个在线考试系统
    在Asp.net core 项目中操作Mysql数据库
    Unity游戏接入TypeSDK集成笔记
    第一篇博客
    两次面试
    [OC笔记] static 关键字
    cellForRowAtIndexPath方法不执行的那些坑
    一行代码设置UITableView分割线的长度
    [转载]iOS开发:获取设备信息
  • 原文地址:https://www.cnblogs.com/iplus/p/4464642.html
Copyright © 2011-2022 走看看