Tham khảo tài liệu ''giáo trình phân tích khả năng sử dụng thuật toán hiệu chỉnh trong đường chạy lập trình p2'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
O W N y bu k lic } if (Head == 1) { Temp[J1] = M[I1]; J1++; } else { Temp[J2] = M[I1]; J2 ; } I1++; FirstPair = 0; if (I1 > I2) return; Head = – Head; break; } } if (I1 == I2) { Temp[J1] = M[I1]; if (I1 == N-1) L = N; return; } } return; } //======================================================== void NaruralMergeSort1(T M[], int N) { int L = ; if (N < 2) return; while (M[L-1] < M[L] && L L) //Duyệt hết run Thực B12 B7: fread(&a, sizeof(T), 1, Fd) //Đọc phần tử run Fd biến tạm a B8: fwrite(&a, sizeof(T), 1, Ft1) //Ghi giá trị biến tạm a vào tập tin Ft1 B9: K++ B10: IF (feof(Fd)) //Đã phân phối hết Thực Bkt B11: Lặp lại B6 //Chép run từ Fd sang Ft2 B12: K = Trang: 61 d o m w Các thuật toán xếp phương pháp trộn tập tin bao gồm: o m o c C k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuaät lic C c u -tr a c k w w d o w to to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c O W N y bu k lic B13: IF (K > L) Thực B19 B14: fread(&a, sizeof(T), 1, Fd) //Đọc phần tử run Fd biến tạm a B15: fwrite(&a, sizeof(T), 1, Ft2) //Ghi giá trị biến tạm a vào tập tin Ft2 B16: K++ B17: IF (feof(Fd)) //Đã phân phối hết Thực Bkt B18: Lặp lại B13 B19: Lặp lại B4 Bkt: Kết thúc - Thuật toán troän: B1: B2: B3: B4: B5: B6: B7: B8: Ft1 = fopen(DataTemp1, “r”) //Mở tập tin trung gian thứ để đọc liệu Ft2 = fopen(DataTemp2, “r”) //Mở tập tin trung gian thứ hai để đọc liệu Fd = fopen(DataFile, “w”) //Mở tập tin liệu để ghi liệu fread(&a1, sizeof(T), 1, Ft1) //Đọc phần tử run Ft1 biến tạm a1 fread(&a2, sizeof(T), 1, Ft2) //Đọc phần tử run Ft2 biến tạm a2 K1 = //Chỉ số để duyệt run Ft1 K2 = //Chỉ số để duyệt run Ft2 IF (a1 ≤ a2) // a1 đứng trước a2 Fd B8.1: fwrite(&a1, sizeof(T), 1, Fd) B8.2: K1++ B8.3: If (feof(Ft1)) //Đã chép hết phần tử Ft1 Thực B23 B8.4: fread(&a1, sizeof(T), 1, Ft1) B8.5: If (K1 > L) //Đã duyệt hết run Ft1 Thực B11 B8.6: Lặp lại B8 B9: ELSE // a2 đứng trước a1 Fd B9.1: fwrite(&a2, sizeof(T), 1, Fd) B9.2: K2++ B9.3: If (feof(Ft2)) //Đã chép hết phần tử Ft2 Thực hieän B27 B9.4: fread(&a2, sizeof(T), 1, Ft2) B9.5: If (K2 > L) //Đã duyệt hết run Ft2 Thực B17 B9.6: Lặp lại B8 B10: Lặp lại B6 //Chép phần run lại Ft2 Fd B11: IF (K2 > L) //Đã chép hết phần run lại Ft2 Fd Lặp lại B6 B12: fwrite(&a2, sizeof(T), 1, Fd) B13: K2++ B14: IF (feof(Ft2)) //Đã chép hết phần tử Ft2 Thực B27 B15: fread(&a2, sizeof(T), 1, Ft2) B16: Lặp lại B11 Trang: 62 d o m w o m o c C k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật lic C c u -tr a c k w w d o w to to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c ... có thứ tự Trong thuật giải này, để dễ theo dõi sử dụng tập tin phụ (K = 2) trình phân phối, trộn run trình bày riêng thành thuật giải: + Thuật giải phân phối luân phiên (tách) đường chạy với chiều... Ft2; + Thuật giải trộn (nhập) cặp đường chạy hai tập tin Ft1, Ft2 có chiều dài L tập tin Fd thành đường chạy với chiều dài 2*L; Giả sử lỗi thao tác tập tin bị bỏ qua trình thực - Thuật toán phân. .. theo phương pháp trộn mảng, thuật giải tìm cách phân phối đường chạy tập tin liệu tập tin trung gian sau lại trộn tương ứng cặp đường chạy tập tin trung gian thành đường chạy có chiều dài lớn Trang: