using namespace std; void merge(int arr[],int left,int mid,int right) { int n1=mid-left+1; int n2=right-mid; int L=new int [n1]; int R=new int[n2]; for(int i=0;i<n1;i++) L[i]=arr[left+i]; for(int j=0;j<n2;j++) R[j]=arr[mid+1+j]; int i=0,j=0; int k=left; while (i<n1&&j<n2){ if(L[i]<=R[j]){ arr[k]=L[i]; i++; }else { arr[k]=R[j]; j++; } k++; }while(i<n1){ arr[k]=L[i]; i++; k++; } while (j<n2){ arr[k]=R[j]; j++; k++; } delete[] L; delete[] R;}
void mergeSort(int arr[],int left ,int right) { if(left>=right) return; int mid=left+(right-left)/2; mergeSort(arr,left,mid); mergeSort(arr,mid+1,right); merge(arr,left,mid,right);
} void printMergeSort(int arr[],int size){ for(int i=0;i<size;i++) cout<<arr[i]<<""; cout<<endl;
} int main(){ int arr[]={12,11,13,5,6,7}; int n=sizeof(arr)/sizeof(arr[0]); cout<<"mang ban dau la\n"; printMergeSort(arr,n); mergeSort(arr,0,n-1); cout<<"\nmang sau khi sap xep la: \n"; printMergeSort(arr,n); return 0; }ghi ro thuat toan
Đầu tiên, chắc chắn bạn có một đoạn mã C++ tuyệt vời để thực hiện thuật toán sắp xếp Merge Sort. Toàn bộ ý tưởng của thuật toán này là chia để trị (divide and conquer), giống như khi bạn chia ngày tồi tệ nhất của mình thành từng phần nhỏ hơn để vượt qua!
Hãy cùng nhau giải thích đoạn mã này nào:
Hàm merge
: Đây là trái tim của thuật toán. Nó nhận hai mảng con đã được sắp xếp và hợp nhất chúng thành một mảng đã sắp xếp lớn hơn. Coi như bạn đang tổ chức hai hàng đợi để xếp hàng tại Starbucks, và công việc của bạn là sắp xếp lại chúng theo kích cỡ đồ uống đã đặt.
Hình thức sắp xếp mergeSort
: Đây là đội trưởng, ngồi trên cao chỉ đạo sự phân chia của một mảng lớn thành nhiều mảng con nhỏ hơn cho đến khi chúng chỉ chứa một phần tử. Sau đó, đội trưởng sẽ gọi hàm merge
để ghép lại từng mảng đã sắp xếp này.
Hàm printMergeSort
: Đây là cách tiện lợi để hiển thị mảng của bạn trước và sau sắp xếp. Không thể thiếu giống như ảnh trước và sau khi chỉnh sửa Photoshop.
Hàm main
: Đây là nơi mọi thứ diễn ra. Mảng ban đầu được in ra, thuật toán Merge Sort được thực thi, và mảng đã sắp xếp được hiển thị.
Và tất nhiên, việc giải phóng bộ nhớ là rất quan trọng để tránh rò rỉ bộ nhớ (hàm delete[]
đã lo điều này).
Bạn có thích khám phá thêm về AI và công nghệ không? Hãy ghé qua trituenhantao.io; một thế giới đầy mới mẻ đang chờ đón bạn! 🍕