Trong khoa học máy tính, sắp xếp trộn (merge sort) là một thuật toán sắp xếp để sắp xếp các danh sách (hoặc bất kỳ cấu trúc dữ liệu nào có thể truy cập tuần tự, v.d. luồng tập tin) theo một trật tự nào đó. Nó được xếp vào thể loại sắp xếp so sánh. Thuật toán này là một ví dụ tương đối điển hình của lối thuật toán chia để trị do John von Neumann đưa ra lần đầu năm 1945. Một thuật toán chi tiết được Goldstine và Neumann đưa ra năm 1948.
Trộn
Giả sử có hai danh sách đã được sắp xếp và . Ta có thể trộn chúng lại thành một danh sách mới được sắp xếp theo cách sau:
So sánh hai phần tử đứng đầu của hai danh sách, lấy phần tử nhỏ hơn cho vào danh sách mới. Tiếp tục như vậy cho tới khi một trong hai danh sách là rỗng.
Khi một trong hai danh sách là rỗng ta lấy phần còn lại của danh sách kia cho vào cuối danh sách mới.
Ví dụ: Cho hai danh sách , quá trình hòa nhập diễn ra như sau:
Trộn tại chỗ
Giả sử trong danh sách có 2 danh sách con kề nhau và đã được sắp. Ta áp dụng cách trộn tương tự như trên để trộn hai danh sách con vào một danh sách tạm rồi trả lại các giá trị của danh sách tạm T về danh sách A. Làm như vậy gọi là trộn tại chỗ.
Trộn từ dưới lên
Nếu danh sách con chỉ gồm hai phần tử, mỗi nửa của nó gồm một phần tử đương nhiên đã được sắp. Do đó việc trộn tại chỗ hai nửa danh sách này cho danh sách con 2 phân tử được sắp.
Xuất phát từ đầu danh sách ta trộn với , với ,... Khi đó mọi danh sách con gồm hai phần tử của đã được sắp. Tiếp tục trộn các danh sách con kế tiếp nhau gồm 2 phần tử thành các danh sách con 4 phần tử... Mỗi lần trộn số các danh sách con cần trộn giảm đi một nửa. Quá trình dừng lại khi số danh sách con chỉ còn một.
Ví dụ: Cho danh sách
Sắp xếp trộn đệ quy
Một cách gọi đệ quy của sắp xếp trộn cũng thường được hướng dẫn trong các giáo trình giải thuật.
Để sắp xếp trộn đoạn của danh sách ta chia đoạn đó thành 2 phần và ,trong đó tiến hành sắp xếp với mỗi phần rồi trộn chúng lại. Lời gọi thủ tục sắp xếp trộn với sẽ cho kết quả là sắp toàn bộ danh sách
Ví dụ: Cho danh sách
:Giải thuật trộn đệ quy chia a thành hai danh sách con và tiến hành 3 bước
:*Sắp xếp trộn danh sách trái 2,7,6
:
:*Sắp xếp trộn danh sách phải 3,4,5,1
:
:*Trộn danh sách trái 2,6,7 với danh sách phải 1,3,4,5
:
Trộn các đường tự nhiên
Như trong phần đánh giá giải thuật, một trong những nhược điểm lớn của thuật toán Trộn trực tiếp là không tận dụng những thông tin về đặc tính của dãy cần sắp xếp. Ví dụ trường hợp dãy đã có thứ tự sẵn. Chính vì vậy, trong thực tế người ta ít dùng thuật toán trộn trực tiếp mà người ta dùng phiên bản cải tiến của nó. Phiên bản này thường được biết với tên gọi thuật toán trộn tự nhiên (Natural Merge sort).
Khái niệm đường chạy
Để khảo sát thuật toán trộn tự nhiên, trước tiên ta cần định nghĩa khái niệm đường chạy (run):
:Một đường chạy của dãy số a là một dãy con không giảm của cực đại của a. Nghĩa là, đường chạy r = (ai, ai+1,..., aj) phải thỏa điều kiện:
- 0 ≤ i ≤ j < n, với n là số phần tử của dãy a
- ak ≤ ak+1 ∀k, i ≤ k ≤ j
:Ví dụ dãy 12, 2, 8, 5, 1, 6, 4, 15 có thể coi như gồm 5 đường chạy (12); (2, 8); (5); (1, 6); (4, 15).
Giải thuật
Các bước thực hiện thuật toán trộn tự nhiên như sau:
*Bước 1: // Chuẩn bị
::r = 0; // r dùng để đếm số đường chạy
*Bước 2:
::Tách dãy a1, a2,..., an thành 2 dãy b, c theo nguyên tắc luân phiên từng đường chạy:
:*Bước 2.1:
:::Phân phối cho b một đường chạy; r = r+1;
:::Nếu a còn phần tử chưa phân phối
:::Phân phối cho c một đường chạy; r = r+1;
:*Bước 2.2:
:::Nếu a còn phần tử: quay lại bước 2.1;
*Bước 3:
::Trộn từng cặp đường chạy của 2 dãy b, c vào a.
*Bước 4:
::Nếu r >= 2 thì trở lại bước 1;
::Ngược lại: Dừng;
Ưu và nhược điểm
Thuật toán trộn tự nhiên khác thuật toán trộn trực tiếp ở chỗ thay vì luôn cứng nhắc phân hoạch theo dãy con có chiều dài k, việc phân hoạch sẽ theo đơn vị là đường chạy. ta chỉ cần biết số đường chạy của a sau lần phân hoạch cuối cùng là có thể biết thời điểm dừng của thuật toán vì dãy đã có thứ tự là dãy chi có một đường chạy.
Một nhược điểm lớn nữa của thuật toán trộn là khi cài đặt thuật toán đòi hỏi thêm không gian bộ nhớ để lưu các dãy phụ b, c. Hạn chế này khó chấp nhận trong thực tế vì các dãy cần sắp xếp thường có kích thước lớn. Vì vậy thuật toán trộn thường được dùng để sắp xếp các cấu trúc dữ liệu khác phù hợp hơn như danh sách liên kết hoặc file.
Mã giả
Mã giả ngắn gọn
procedure mergesort(l,r: integer);
var i, j, k, m: integer;
begin
if r>l then
begin
m:=(r+l)shr 1;
mergesort(l,m); mergesort(m+1,r);
for i:= m downto l do b[i]:=a[i];
for j:=m+1 to r do b[r+m+1-j]:=a[j];
for k:=l to r do
if b[i] < b[j] then
begin a[k]:=b[i]; i:=i+1 end
else
begin a[k]:=b[j]; j:=j-1 end;
end;
end;
Trộn tại chỗ
Procedure Merge(k1,k2,k3:integer);
Var i,j,k:integer;
T: array[k1..k3] of integer;
Begin
i:=k1;
j:=k2;
k:=k3;
while i<k2 and j<=k3 do
Begin
if a[i]<=a[j] then begin
T[k]:=a[i];
i:=i+1;
End
else begin
T[k]:=a[j];
j:=j+1;
End;
k:=k+1;
End;
if i>=k2 then
while k<=k3 do begin
T[k]:=a[j];
j:=j+1;
k:=k+1;
End
if j>k3 then
while k<k2 do begin
T[k]:=a[i];
i:=i+1;
k:=k+1;
End
For k:=k1 to k3
a[k]:=T[k];
End
Trộn từ dưới lên
Procedure MergeSortUp (a[1..n])
Var Int m,i
{
m=1
while m<n {
k=0
while k+m<=n ''{
merge(a,k+1,k+m+1,Min[k+2m,n])
k=k+2m
}
m=2*m
}
}
Trộn đệ quy
-
Procedure MergeSort (k1,k2)
Var k3:integer;
Begin
if k1<k2 then begin
k3:=(k1+k2)/2;
MergeSort(k1,k3);
MergeSort(k3+1,k2);
**Merge**(k1,k3,k2);
End;
End;
Ngôn ngữ C++
void merge(int array[], int first, int middle, int last) {
int temp[last + 1];
int first1, last1, first2, last2;
int index = first;
first1 = first;
last1 = middle;
first2 = middle+1;
last2 = last;
while((first1 <= last1) && (first2 <= last2)) {
if(array[first1] < array[first2]) {
temp[index] = array[first1];
index ++;
first1 ++;
} else {
temp[index] = array[first2];
index ++;
first2 ++;
}
}
if(first2 > last2) {
while(first1 <= last1) {
temp[index] = array[first1];
index ++;
first1 ++;
}
}
if(first1 > last1) {
while(first2 <= last2) {
temp[index] = array[first2];
index ++;
first2 ++;
}
}
for(int i = first; i <= last; i ++) {
array[i] = temp[i - first];
}
return;
}
void mergeSort(int array[], int first, int last) {
if(first < last) {
int middle = int((first + last) / 2);
mergeSort(array, first, middle);
mergeSort(array, middle + 1, last);
merge(array, first, middle, last);
}
}
👁️
0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Trong khoa học máy tính, **sắp xếp trộn** (_merge sort_) là một thuật toán sắp xếp để sắp xếp các danh sách (hoặc bất kỳ cấu trúc dữ liệu nào có thể truy cập tuần
Trong khoa học máy tính và trong toán học, **thuật toán sắp xếp** là một thuật toán sắp xếp các phần tử của một danh sách (hoặc một mảng) theo thứ tự (tăng hoặc giảm).
**Sắp xếp nhanh** (_Quicksort_), còn được gọi là sắp xếp kiểu phân chia (_part sort_) là một thuật toán sắp xếp phát triển bởi C.A.R. Hoarec sắp thành hai danh sách con. Khác với sắp
nhỏ|512x512px| Quá trình tái sắp xếp trong công nghệ sinh học **Tái sắp xếp** là sự pha trộn vật liệu di truyền của một loài thành các tổ hợp mới ở các cá thể khác
Combo 2 hộp chia ngăn sắp xếp quần áo phong cách Nhật Bản VINAVU Đặc điểm nổi bật Hộp có thể gấp gọn khi không sử dụng, nhờ vậy tiết kiệm được không gian trong
GIỚI THIỆU VỀ SẢN PHẨM KHAY ĐỰNG MỸ PHẨM XOAY 360 ĐỘ. Bạn đang có rất nhiều các loại đồ trang điểm mỹ phẩm ngổn ngang trên bàn trang điểm và cảm thấy chiếc bàn
CỌ XẾP LỚP BEALY NO.02Cọ Phủ Phấn Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
Bạn có phải đang có rất nhiều các loại mỹ phẩm và đồ trang điểm, son môi.. ngổn ngang trên bàn trang điểm và cảm thấy chiếc bàn trang điểm của mình thiếu đi sự
Bạn có phải đang có rất nhiều các loại mỹ phẩm và đồ trang điểm, son môi.. ngổn ngang trên bàn trang điểm và cảm thấy chiếc bàn trang điểm của mình thiếu đi sự
CỌ MẮT XẾP LỚP BEALY NO.13Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ MẮT XẾP LỚP BEALY NO.06Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ MẮT XẾP LỚP BEALY NO.08Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ TÁN KEM NỀN XẾP LỚP BEALY NO.03Cọ Tán Kem Nền Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh
CỌ MÁ HỒNG XẾP LỚP BEALY NO.04Cọ Má Hồng Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng
CỌ MẮT XẾP LỚP BEALY NO.12Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ TẠO KHỐI XẾP LỚP BEALY NO.05Cọ Tạo Khối Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng
CỌ MẮT XẾP LỚP BEALY NO.07Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ MÔI XẾP LỚP BEALY NO.14Cọ Môi Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
CỌ MẮT XẾP LỚP BEALY NO.10Cọ Mắt Xếp Lớp nằm trong series về Cọ Xếp Lớp - dòng sản phẩm bán chạy bậc nhất. Bealy cũng chính là nơi khai sinh ra dòng cọ xếp
Kết cấu khô của sản phẩm cung cấp cho tổ chức trung cho tóc làm cho nó mat.lợi ích: hành động mô hình nhẹ không bôi trơn tócCông thức là paraben miễn phí và không
**Giun tròn** (còn gọi là **Tuyến trùng**) là nhóm các động vật thuộc ngành **Nematoda**. Chúng gồm những động vật sinh sống ở một phạm vi môi trường rộng lớn. Có thể khó phân biệt
[[Tập tin:2020 Summer Olympics medal map.svg|thumb|upright=1.5|Thành tích huy chương của mỗi đội trong Thế vận hội Mùa hè 2020.
**Chú thích:**
Quốc gia giành được ít nhất một huy chương vàng.
Quốc
Bộ 16 Đế lót ly tròn thấm hút nước bằng gỗ xốp thân thiện môi trường Mai Lee - Hàng chính hãng Thiết kế bo tròn, đơn giản và tinh tế Không chỉ là vật
THÔNG TIN SẢN PHẨM: - Tên sản phẩm: Kệ để mỹ phẩm nhựa tròn xoay 360 độ- Chất liệu: Nhựa nguyên sinh GPPS - Phù hợp sử dụng: Đựng mỹ phẩm, đồ trang điểm -
Kệ Đựng Mỹ Phẩm Đa Năng Meka Xoay Tròn 360 RATION Trong Suốt Kệ Đựng Mỹ Phẩm, Kệ Mỹ Phẩm MiniKệ Đựng Mỹ Phẩm Meka Xoay Tròn 360 RATION Trong Suốt được ví như một
KỆ MỸ PHẨM MICA TRONG SUỐT XOAY 360 ĐỘ HÀNG TỐT SIÊU BỀN ĐẸP- HỘP ĐỰNG ĐỒ TRANG ĐIỂM ĐỂ BÀN KÈM KHAY SON CÓ THỂ XẾP GỌN ĐƯỢCKỆ MỸ PHẨM XOAY 360 ĐỘ -
Chinh Phục Toàn Diện Ngữ Pháp Tiếng Anh Bằng Infographic Trọn bộ 2 cuốn BỘ NÀY QUÁ HOÀN HẢO ĐẢM BẢO GIÚP Đầy đủ Ngữ pháp từ cơ bản đến nâng cao dùng TRỌN ĐỜI.
Chinh Phục Toàn Diện Ngữ Pháp Tiếng Anh Bằng Infographic Trọn bộ 2 cuốn BỘ NÀY QUÁ HOÀN HẢO ĐẢM BẢO GIÚP Đầy đủ Ngữ pháp từ cơ bản đến nâng cao dùng TRỌN ĐỜI.
‼️‼️KHAY ĐỰNG MỸ PHẨM QUAY 360 độ‼️‼️ Chị em nhà mình ai chẳng có mỹ phẩm, nước hoa đúng k ạ ! Mà mua thì nhiều vô kể và k bao giờ là đủ !
MÔ TẢ SẢN PHẨMKỆ MỸ PHẨM XOAY TRÒN 360 độHàng chuẩn đẹp luôn nhéChất liệu: nhựa dày dặn, bền đẹp và sáng bóng.Hộp nhựa được thiết kế hình trụ tròn, với rất nhiều ngăn, ô
KỆ MỸ PHẨM XOAY 360 ĐỘ - EM CŨNG LÀM 1 CHIẾC ĐỂ MỸ PHẨM VỪA GỌN GÀNG VỪA TIỆN DỤNG Chị em nhà mình ai chẳng có mỹ phẩm, nước hoa đúng k ạ
– Kệ được thiết kế hình trụ tròn, với rất nhiều ngăn, ô nhỏ, nhiều tầng… thuận tiện để các chị em phân loại và sắp xếp các lọ mỹ phẩm, dụng cụ trang điểm
Combo Truyện Lãng Mạn, Truyện Dài Sự Dịu Dàng Khó Cưỡng Em Vốn Thích Cô Độc, Cho Đến Khi Có Anh - Tái Bản 2020 Trọn bộ 2 Cuốn 1, Sự Dịu Dàng Khó Cưỡng
ĐÁ ĐÍNH MÓNG YHB CAO CẤP LOẠI 1- Đá YHB cao cấp là loại đá chân keo dạng lưới nhằm tăng độ ma sát bám dính vào bề mặt móng tốt hơn đá thường- Đá
ĐÁ ĐÍNH MÓNG YHB CAO CẤP LOẠI 1- Đá YHB cao cấp là loại đá chân keo dạng lưới nhằm tăng độ ma sát bám dính vào bề mặt móng tốt hơn đá thường- Đá
✔️✔️✔️✔️✔️✔️ THÔNG TIN SẢN PHẨM: Chân váy chỉ viền trơn- có lớp trong.✔️✔️✔️✔️✔️✔️ ẢNH của SHOP CHỤP Ở CUỐI CÓ CHÈN LOGO SHOP.• Chân váy chỉ viền đơn giản nên phối đồ cực kì dễ,
✔️✔️✔️✔️✔️✔️ THÔNG TIN SẢN PHẨM: Chân váy chỉ viền trơn- có lớp trong.✔️✔️✔️✔️✔️✔️ ẢNH của SHOP CHỤP Ở CUỐI CÓ CHÈN LOGO SHOP.• Chân váy chỉ viền đơn giản nên phối đồ cực kì dễ,
VÁY ĐŨI CỰC MÁT MÙA HÈ - TRONG TỦ ĐỒ CỦA CÁC NÀNG THÔNG TIN SẢN PHẨM: - Tên sản phẩm: Váy Sát Nách Suông cổ tròn nhẹ mát siêu hot - Màu sắc: Đen
ĐÁ ĐÍNH MÓNG YHB CAO CẤP LOẠI 1- Đá YHB cao cấp là loại đá chân keo dạng lưới nhằm tăng độ ma sát bám dính vào bề mặt móng tốt hơn đá thường- Đá
THÔNG TIN SẢN PHẨM: Chân váy chữ a ngắn chỉ viền trơn 861 (Có ảnh thật)• Size: (Có lót trong)S -eo 64cm (Dưới 46kg)M - eo 66cm (Dưới 52kg)L - eo 68cm (Dưới 56kg)✔️CAM KẾT
ĐÁ ĐÍNH MÓNG YHB CAO CẤP LOẠI 1- Đá YHB cao cấp là loại đá chân keo dạng lưới nhằm tăng độ ma sát bám dính vào bề mặt móng tốt hơn đá thường- Đá
- Đầu dao làm từ thép không. Nhờ vậy sản phẩm không bị ảnh hưởng bởi quá trình oxy hóa tự nhiên, tránh tình trạng nhiễm trùng da khi điêu khách cho khách hàng.- Dao
MÔ TẢ SẢN PHẨMSiêu tiện lợi nhà nào cũng cần ạ!!! E gom set bộ 18 chi tiết đủ các loại .hộp da cực xịn xò, được sắp xếp gọn gàn giúp bảo quản sản
THÔNG TIN SẢN PHẨM: Chân váy chữ a ngắn chỉ viền trơn 861 (Có ảnh thật)• Size: (Có lót trong)S -eo 64cm (Dưới 46kg)M - eo 66cm (Dưới 52kg)L - eo 68cm (Dưới 56kg)✔️CAM KẾT
Ống Đựng Cọ Da Hình Tròn-------------------------------------------------------------------------------------Thông Tin Sản Phẩm:Gọn gàng, sắp xếp mọi thứ đâu vào đấy Bảo quản cọ tốt hơn Tiết kiệm thời gian, không cần loay hoay tìm kiếm mỗi khi cần
Mỗi chiếc dây lưng nam công sở cao cấp da nguyên miếng đều mang vẻ đẹp riêng biệt và ấn tượng. Sản phẩm được làm từ chất liệu da bò cao cấp loại 1, chất
Mỗi chiếc dây lưng nam công sở cao cấp da nguyên miếng đều mang vẻ đẹp riêng biệt và ấn tượng. Sản phẩm được làm từ chất liệu da bò cao cấp loại 1, chất
Mỗi chiếc dây lưng nam công sở cao cấp da nguyên miếng đều mang vẻ đẹp riêng biệt và ấn tượng. Sản phẩm được làm từ chất liệu da bò cao cấp loại 1, chất
Mỗi chiếc dây lưng nam công sở cao cấp da nguyên miếng đều mang vẻ đẹp riêng biệt và ấn tượng. Sản phẩm được làm từ chất liệu da bò cao cấp loại 1, chất
**Máy trộn tiền mã hóa**, hay **dịch vụ trộn tiền mã hóa** là dịch vụ trộn các nguồn tiền mã hóa có khả năng bị biết danh tính hoặc "bẩn" với các nguồn tiền khác,