程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C言語 奇偶排序算法詳解及實例代碼

C言語 奇偶排序算法詳解及實例代碼

編輯:關於C++

C言語 奇偶排序算法詳解及實例代碼。本站提示廣大學習愛好者:(C言語 奇偶排序算法詳解及實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C言語 奇偶排序算法詳解及實例代碼正文


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: [email protected]) 
// 博客地址: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;
}

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved