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

โปรแกรม C ++ สำหรับการจัดเรียงหวี?


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

Input:53421
Output:12345

คำอธิบาย

การเรียงลำดับแบบหวีเปรียบเทียบสององค์ประกอบที่มีช่องว่างซึ่งถูกกำหนดเป็น [n/c] โดยที่ n คือจำนวนขององค์ประกอบและ c คือปัจจัยการหดตัวเช่น 1.3 หลังจากการวนซ้ำแต่ละครั้ง ตัวเลขนี้จะถูกหารด้วย c และพื้น จนกระทั่งในที่สุด อัลกอริธึมจะพิจารณาองค์ประกอบที่อยู่ติดกัน

ตัวอย่าง

#include <iostream>
using namespace std;
void combsort(int a[], int n) {
   int i, j, gap, swapped = 1;
   double temp;
   gap = n;
   while (gap > 1 || swapped == 1) {
      gap = gap * 10 / 1.3;
      if (gap == 9 || gap == 10) {
         gap = 11;
      }
      if (gap < 1) {
         gap = 1;
      }
      swapped = 0;
      for (i = 0, j = gap; j < n; i++, j++) {
         if (a[i] > a[j]) {
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
            swapped = 1;
         }
      }
   }
}
int main () {
   int n, i;
   int arr[] = { 5, 3, 4, 2, 1 };
   n=5;
   combsort(arr, n);
   for(i = 0;i < n;i++) {
      cout<<arr[i]<<"\t";
   }
   return 0;
}