Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C/C++ สำหรับการเรียงลำดับเลขคู่ (Brick Sort)?


ดาบคู่คี่หรือที่เรียกว่าอิฐเป็นเทคนิคการเรียงลำดับที่คล้ายกันเช่นการเรียงลำดับฟอง เทคนิคการเรียงลำดับนี้แบ่งออกเป็น 2 เฟส คือ เฟสคี่และเฟสคู่ ทั้งสองเฟสนี้ทำงานพร้อมกันทุกครั้งที่วนซ้ำ จนกว่าองค์ประกอบทั้งหมดจะถูกจัดเรียง

ระยะคี่ ของเทคนิคการเขียนโปรแกรมนี้ทำงานเป็นแบบฟองอากาศ แต่เฉพาะกับองค์ประกอบที่มีดัชนีคี่

ในทำนองเดียวกัน ระยะคู่ ใช้ได้เฉพาะกับองค์ประกอบที่มีดัชนีเท่ากัน

เพื่อให้แนวคิดนี้ชัดเจนยิ่งขึ้น มาดูตัวอย่างกัน :

Input: a[]={3,5,7,6,1,4,2}
Output: 1 2 3 4 5 6 7

คำอธิบาย

การเรียงลำดับเลขคู่หรือที่เรียกว่าการเรียงลำดับอิฐเป็นเทคนิคการคัดแยกอย่างง่ายที่ออกแบบมาโดยคำนึงถึงการประมวลผลแบบขนาน ใช้การเปรียบเทียบเพื่อจัดเรียงองค์ประกอบ การเปรียบเทียบเกิดขึ้นกับคู่คี่/คู่ทั้งหมดตามอายุและองค์ประกอบ หากคู่ใดอยู่ในลำดับที่ไม่ถูกต้องและคำสั่งซื้อจะถูกเปลี่ยนเพื่อให้ถูกต้อง กระบวนการนี้ดำเนินต่อไปจนกว่าจะมีการจัดเรียงรายการ เนื่องจากได้รับการพัฒนาสำหรับกระบวนการแบบขนาน มันสามารถสร้างค่าได้หนึ่งค่าต่อโปรเซสเซอร์ และทั้งสองกระบวนการทำงานพร้อมกันในการดำเนินการประเภทการแลกเปลี่ยน-เปรียบเทียบ อัลกอริทึมนี้ถูกนำเสนอครั้งแรกและแสดงให้เห็นว่ามีประสิทธิภาพในโปรเซสเซอร์ดังกล่าว

ตัวอย่าง

#include <stdio.h>
#include <math.h>
#define MAX 7
void swap(int *,int *);
void oddeven_sort(int *);
int main() {
   int a[]={3,5,7,6,1,4,2}, i;
   oddeven_sort(a);
   for (i = 0;i < MAX;i++) {
      printf(" %d", a[i]);
   }
}
void swap(int * x, int * y) {
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;
}
void oddeven_sort(int * x) {
   int sort = 0, i;
   while (!sort) {
      sort = 1;
      for (i = 1;i < MAX;i += 2) {
         if (x[i] > x[i+1]) {
            swap(&x[i], &x[i+1]);
            sort = 0;
         }
      }
      for (i = 0;i < MAX - 1;i += 2) {
         if (x[i] > x[i + 1]) {
            swap(&x[i], &x[i + 1]);
            sort = 0;
         }
      }
   }
}

ผลลัพธ์

1234567