Computer >> Máy Tính >  >> Lập trình >> lập trình C

Giải thích kỹ thuật sắp xếp hợp nhất trong ngôn ngữ C

Sắp xếp là quá trình sắp xếp các phần tử theo thứ tự tăng dần (hoặc) giảm dần.

Các kiểu sắp xếp

Ngôn ngữ C cung cấp năm kỹ thuật sắp xếp như sau -

  • Sắp xếp bong bóng (hoặc) Sắp xếp trao đổi
  • Sắp xếp lựa chọn
  • Sắp xếp chèn (hoặc) Sắp xếp tuyến tính
  • Sắp xếp nhanh (hoặc) Sắp xếp trao đổi phân vùng
  • Sắp xếp Hợp nhất (hoặc) Sắp xếp bên ngoài

Hợp nhất sắp xếp

Merge sort là một phương pháp chia để trị. Nó chia một mảng thành hai nửa, chinh phục đệ quy và hợp nhất (kết hợp).

Hãy xem xét một ví dụ được đưa ra bên dưới -

Lấy một mảng chưa được sắp xếp và áp dụng kỹ thuật sắp xếp hợp nhất để sắp xếp mảng.

38, 27, 43, 3, 9, 82, 10

Giải thích kỹ thuật sắp xếp hợp nhất trong ngôn ngữ C

Bây giờ, hãy kết hợp một mảng bằng cách sắp xếp như hình dưới đây -

Giải thích kỹ thuật sắp xếp hợp nhất trong ngôn ngữ C

Ví dụ

Sau đây là chương trình C để sắp xếp các phần tử bằng cách sử dụng kỹ thuật sắp xếp hợp nhất -

#include <stdio.h>
#define max 10
int a[11] = { 10, 14, 19, 26, 27, 31, 33, 35, 42, 44, 0 };
int b[10];
void merging(int low, int mid, int high) {
   int l1, l2, i;
   for(l1 = low, l2 = mid + 1, i = low; l1 <= mid && l2 <= high; i++) {
      if(a[l1] <= a[l2])
         b[i] = a[l1++];
      else
         b[i] = a[l2++];
   }
   while(l1 <= mid)
      b[i++] = a[l1++];
   while(l2 <= high)
      b[i++] = a[l2++];
   for(i = low; i <= high; i++)
      a[i] = b[i];
   }
   void sort(int low, int high) {
      int mid;
      if(low < high) {
         mid = (low + high) / 2;
         sort(low, mid);
         sort(mid+1, high);
         merging(low, mid, high);
      } else {
      return;
   }
}
int main() {
   int i;
   printf("List before sorting\n");
   for(i = 0; i <= max; i++)
   printf("%d ", a[i]);
   sort(0, max);
   printf("\nList after sorting\n");
   for(i = 0; i <= max; i++)
   printf("%d ", a[i]);
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

List before sorting
10 14 19 26 27 31 33 35 42 44 0
List after sorting
0 10 14 19 26 27 31 33 35 42 44