• 奇偶排序


    奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序。该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换。下一步重复该操作,但针对所有的(偶-奇)位置数字对。如此交替进行下去。

    处理器数组的排序

    在并行计算排序中,每个处理器对应处理一个值,并仅有与左右邻居的本地互连。所有处理器可同时与邻居进行比较、交换操作,交替以奇-偶、偶-奇的顺序。该算法由Habermann在1972年最初发表并展现了在并行处理上的效率。

    该算法可以有效地延伸到每个处理器拥有多个值的情况。在Baudet–Stevenson奇偶合并分区算法中,每个处理器在每一步对自己所拥有的子数组进行排序,然后与邻居执行合并分区或换位合并。

    Batcher奇偶归并排序

    Batcher奇偶归并排序是一种相关但更有效率的排序算法,采用比较-交换和完美-洗牌操作。

    Batcher的方法在拥有广泛互连的并行计算处理器上效率不错。

    算法

    以下表现其单处理器算法,类似冒泡排序,较为简单但效率并不特别高。

     1 #include<stdio.h>    
     2 #include<string.h>   
     3 #include<math.h>   
     4 #include<ctype.h>   
     5 #include<stdbool.h>  
     6 
     7 void swap(int *a, int *b)
     8 {
     9     int t;
    10     t=*a;
    11     *a=*b;
    12     *b=t;
    13 }
    14 
    15 void printArray(int a[], int count)
    16 {
    17     int i;
    18     for(i=0; i<count; i++)
    19         printf("%d ",a[i]);
    20     printf("\n");
    21 }
    22 
    23 void Odd_even_sort(int a[], int size)  
    24 {
    25     bool sorted=false;
    26     while(!sorted)
    27     {
    28         sorted=true;
    29         for(int i=1; i<size-1; i+=2)
    30         {
    31             if(a[i]>a[i+1])
    32             {
    33                 swap(&a[i],&a[i+1]);
    34                 sorted=false;
    35             }
    36         }
    37         for(int i=0; i<size-1; i+=2)
    38         {
    39             if(a[i]>a[i+1])
    40             {
    41                 swap(&a[i],&a[i+1]);
    42                 sorted=false;
    43             }
    44         }
    45     }
    46 }
    47 
    48 int main(void)   
    49 {
    50     int a[]={3, 5, 1, 6, 9, 7, 8, 0, 11};
    51     int n=sizeof(a)/sizeof(*a);
    52     Odd_even_sort(a,n);
    53     printArray(a,n);
    54     return 0;
    55 }
  • 相关阅读:
    VS2010中的单元测试
    GSM局数据制作2(Erision)
    WPF的BitmapImage的文件无法释放及内存泄露的问题
    跨库查询推荐使用的方法
    我们能做什么呢?
    长尾理论:Windows Vista
    Blackberry阻碍因素
    RIM终于想通了RIM开放新的API
    Prototype库终于有了文档了
    自己编写的MSN历史记录合并工具
  • 原文地址:https://www.cnblogs.com/cpoint/p/3367366.html
Copyright © 2020-2023  润新知