C語言 奇偶排序演算法詳解及執行個體代碼_C 語言

來源:互聯網
上載者:User

C語言奇偶排序演算法

奇偶排序,或奇偶換位排序,或磚排序,是一種相對簡單的排序演算法,最初發明用於有本地互連的並行計算。這是與冒泡排序特點類似的一種比較排序。該演算法中,通過比較數組中相鄰的(奇-偶)位置數字對,如果該奇偶對是錯誤的順序(第一個大於第二個),則交換。下一步重複該操作,但針對所有的(偶-奇)位置數字對。如此交替進行下去。

使用奇偶排序法對一列隨機數字進行排序的過程

處理器數組的排序

在並行計算排序中,每個處理器對應處理一個值,並僅有與左右鄰居的本地互連。所有處理器可同時與鄰居進行比較、交換操作,交替以奇-偶、偶-奇的順序。該演算法由Habermann在1972年最初發表並展現了在平行處理上的效率。

該演算法可以有效地延伸到每個處理器擁有多個值的情況。在Baudet–Stevenson奇偶合并分區演算法中,每個處理器在每一步對自己所擁有的子數組進行排序,然後與鄰居執行合并分區或換位合并。

Batcher奇偶歸併排序

Batcher奇偶歸併排序是一種相關但更有效率的排序演算法,採用比較-交換和完美-洗牌操作。

Batcher的方法在擁有廣泛互連的並行計算處理器上效率不錯。

演算法

舉例:待排數組[6 2 4 1 5 9]

第一次比較奇數列,奇數列與它的鄰居偶數列比較,如6和2比,4和1比,5和9比

[6 2 4 1 5 9]

交換後變成

[2 6 1 4 5 9]

第二次比較偶數列,即6和1比,5和5比

[2 6 1 4 5 9]

交換後變成

[2 1 6 4 5 9]

第三趟又是奇數列,選擇的是2,6,5分別與它們的鄰居列比較

[2 1 6 4 5 9]

交換後

[1 2 4 6 5 9]

第四趟偶數列

[1 2 4 6 5 9]

一次交換

[1 2 4 5 6 9]

以下表現其單一處理器演算法,類似冒泡排序,較為簡單但效率並不特別高。

// Completed on 2014.10.8 12:05// Language: C99//// 著作權(C)codingwu  (mail: oskernel@126.com) // 部落格地址:http://www.cnblogs.com/archimedes/#include<stdio.h>#include<stdlib.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;}

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.