奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序。该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换。下一步重复该操作,但针对所有的(偶-奇)位置数字对。如此交替进行下去。
处理器数组的排序
在并行计算排序中,每个处理器对应处理一个值,并仅有与左右邻居的本地互连。所有处理器可同时与邻居进行比较、交换操作,交替以奇-偶、偶-奇的顺序。该算法由Habermann在1972年最初发表并展现了在并行处理上的效率。
该算法可以有效地延伸到每个处理器拥有多个值的情况。在Baudet–Stevenson奇偶合并分区算法中,每个处理器在每一步对自己所拥有的子数组进行排序,然后与邻居执行合并分区或换位合并。
Batcher奇偶归并排序
Batcher奇偶归并排序是一种相关但更有效率的排序算法,采用比较-交换和完美-洗牌操作。
Batcher的方法在拥有广泛互连的并行计算处理器上效率不错。
算法
以下表现其单处理器算法,类似冒泡排序,较为简单但效率并不特别高。
#include<stdio.h> #include<string.h> #include<math.h> #include<ctype.h> #include<stdbool.h> void swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; } void printArray(int a[], int count) { int i; for(i=0; i<count; i++) printf("%d ",a[i]); printf("\n"); } void Odd_even_sort(int a[], int size) { bool sorted=false; while(!sorted) { sorted=true; for(int i=1; i<size-1; i+=2) { if(a[i]>a[i+1]) { swap(&a[i],&a[i+1]); sorted=false; } } for(int i=0; i<size-1; i+=2) { if(a[i]>a[i+1]) { swap(&a[i],&a[i+1]); sorted=false; } } } } int main(void) { int a[]={3, 5, 1, 6, 9, 7, 8, 0, 11}; int n=sizeof(a)/sizeof(*a); Odd_even_sort(a,n); printArray(a,n); return 0; }
相关推荐
利用mpi进行奇偶排序的实现,有较好的性能和可扩展性
在这个奇偶排序算法中,MPI可能被用来分配任务,同步进程,以及交换数据,以便在多个处理器之间有效地进行排序。 奇偶排序是一种并行算法,通常用于大规模数据的排序。它的基本思想是将待排序的数据分为两部分:...
C语言奇偶排序算法 奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序。该算法中,通过比较数组中相邻的(奇-偶)位置数字...
奇偶排序算法是一种基于位置奇偶性的排序算法,它把数组分为奇数位置和偶数位置的两部分分别进行排序。该算法的基本思想是在一个未排序的序列中,先将所有奇数位置的元素(即1,3,5...位置的元素)进行排序,再将...
奇偶排序算法是一种简单的排序方法,它通过交替对数组中的奇数索引和偶数索引元素进行排序来实现整体的排序。这个算法的核心思想是将数组分为两个部分:奇数索引元素(奇数列)和偶数索引元素(偶数列),然后分别对...
其次,为了实现奇偶排序,我们需要了解两种基本的排序算法:插入排序和快速排序。插入排序对于小规模数据或部分有序的数据有很好的表现,而快速排序则适用于大规模数据,平均时间复杂度为O(n log n)。在这个问题中,...
奇偶排序算法的C语言实现 奇偶排序算法是一种简单的排序算法,它将数组分为奇数和偶数两部分,然后对每部分进行排序。本文将介绍如何使用C语言实现奇偶排序算法。 首先,需要定义两个数组,一个用于存储奇数,另一...
在实际应用中,如果需要频繁进行此类操作,考虑到空间复杂度,可能需要考虑更优化的解决方案,例如原地排序,但原地奇偶排序可能会增加算法的复杂性。在这个例子中,由于只涉及到整数的奇偶性判断和数组操作,算法...
【汇编语言奇偶排序资源代码】是一个与软件和插件相关的主题,主要涉及的是使用汇编语言实现的一种特定的排序算法——奇偶排序。在计算机科学中,排序算法是处理数据的重要工具,它们用于组织和优化数据结构,提高...
在这段代码中,我们定义了一个Sort类,其中包含了一个batcherSort方法用于执行奇偶排序算法。batcherSort方法接受一个整数数组作为参数,并根据奇偶排序的原理进行排序。同时,还提供了swap方法来交换数组中两个元素...
在CUDA环境下,一种常见的排序算法是Thrust库提供的“bitonic sort”,这是一种基于位运算的并行排序算法,适合在GPU上实现。Thrust是一个C++模板库,它提供了类似于STL(标准模板库)的接口,但针对CUDA进行了优化...
在本压缩包“php-leetcode题解之按奇偶排序数组2.zip”中,主要包含的是使用PHP语言解决LeetCode算法题目的代码实现,题目要求是将一个整数数组按照奇偶性进行排序,即所有奇数位于前面,偶数位于后面。这个任务涉及...
最快的排序算法 把Excel里的一列数字按照奇偶数的形式排序出来怎样做才是最好最快的方法,排序算法数据结构
经典的排序算法C#源码...经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳排序Comb sort 经典排序算法 - 耐心排序Patience Sorting 经典排序算法 - 珠排序Bead Sort 经典排序算法 - 计数排序Counting sort
设 A[]是由非 0 整数构成的数组,要求设计一个算法重新排列数组 A[]中的数,使得奇数 都排在偶数的前面。要求该算法的时间复杂度为 O(n),空间复杂度为 O(1)。
题目 "按奇偶排序数组1" 是一个编程挑战,源自著名的在线编程平台 LeetCode。它的目标是给定一个非负整数数组,重新排列数组,使得所有偶数元素出现在奇数元素之前。这个任务可以通过双指针技术来解决,这是一种在...
奇偶冒泡排序是一种优化了传统冒泡排序算法的排序方法,主要目的是为了减少不必要的比较和交换操作,从而提高排序效率。在C语言中实现奇偶冒泡排序,我们需要理解其基本原理,并能够熟练地编写相应的代码。 首先,...
8. **文件`odd_even_sort.c`**:这个文件很可能是用C语言编写的奇偶排序算法实现,包含了使用MPI进行进程间通信的代码。文件内容可能包括初始化MPI环境、划分数据、执行奇偶排序步骤以及最终的同步和结果合并。 ...