Cách Nhanh Có Thật Sự Nhanh Trong Sắp Xếp Mảng 2 Chiều
Có thể bạn quan tâm
Sắp xếp các phần tử trên mảng 2 chiều tăng dần từ trên xuống dưới và từ trái sang phải.
Theo mình được biết là có 2 ý tưởng cho bài này
Ý tưởng 1: Đối với người chưa biết dùng 1 vòng lặp để duyệt mảng 2 chiều sẽ làm như sau: Bước 1: Đọc tất cả các phần tử trong mảng 2 chiều hiện tại sang 1 mảng 1 chiều. Bước 2: Sắp xếp mảng 1 chiều đó tăng dần. Bước 3: Từ mảng 1 chiều tăng dần, đọc lại vào mảng 2 chiều.
void SapXepMang2ChieuTangDan_Cach1(int a[][MAX], int SoDong, int SoCot) { int n = 0; int b[MAX]; for(int i = 0; i < SoDong; i++) { for(int j = 0; j < SoCot; j++) { b[n] = a[i][j]; n++; } } SapXepMang1ChieuTangDan(b, n); n = 0; for(int i = 0; i < SoDong; i++) { for(int j = 0; j < SoCot; j++) { a[i][j] = b[n]; n++; } } }Và đây là ý tưởng 2 : Đối với người biết cách dùng 1 vòng lặp duyệt mảng 2 chiều. => Làm như bên mảng 1 chiều.
void SapXepMang2ChieuTangDan_Cach2(int a[][MAX], int SoDong, int SoCot) { int n = SoDong * SoCot; for(int i = 0; i < n - 1; i++) { for(int j = i + 1; j < n; j++) { if(a[i / SoCot][i % SoCot] > a[j / SoCot][j % SoCot]) { HoanVi(a[i / SoCot][i % SoCot], a[j / SoCot][j % SoCot]); } } } }Nhìn thì ai cũng biết là cách 1 tốn bộ nhớ và nó chậm hơn cách 2 rất là nhiều ( đại ca Nguyễn Việt Nam Sơn cũng nói thế) Nhưng khi dùng hàm đo thời gian thì lại xãy ra chuyện là cách 2 lại chạy chậm hơn cách 1
Dẫn chứng
/* ============== Đo Thời Gian Cách 1 ============== */ clock_t start1 = clock(); for(int i = 1; i <= 10000000; i++) { SapXepMang2ChieuTangDan_Cach1(a, SoDong, SoCot); } clock_t finish1 = clock(); /* ================================================= */ /* ============== Đo Thời Gian Cách 2 ============== */ clock_t start2 = clock(); for(int i = 1; i <= 10000000; i++) { SapXepMang2ChieuTangDan_Cach2(a, SoDong, SoCot); } clock_t finish2 = clock(); /* ================================================= */TẠI SAO NHĨ PHẢI CHĂNG CÁCH 1 VẪN LÀ CÁCH NHANH NHẤT HAY HÀM KIỂM TRA THỜI GIAN ĐÃ DÙNG KHÔNG ĐÚNG
Và mình cũng thắc mắc rất nhiều nên mới đem lên đây và mong nhận được cao kiến của anh chị em,và đây là lần đầu tiên em đăng bài lên diễn đàn nếu có gì sai xót mong anh chị góp ý
Từ khóa » Cách Sắp Xếp Mảng 2 Chiều Pascal
-
Thuật Toán Sắp Xếp Qua Lại Mảng Hai Chiều Trong Pascal - Ôn Thi HSG
-
Sắp Xếp Zích Zắc Mảng Hai Chiều - Code Free Pascal - Ôn Thi HSG
-
Sắp Xếp Mảng 2 Chiều Tăng Dần Trái - Phải, Trên - Dưới - Thiệu Mao
-
Viết Chương Trình Sắp Xếp Mảng 2 Chiều Theo Các Yêu Cầu Sau - Hoc24
-
Bài Tập Sắp Xếp Mảng 2 Chiều | Cộng đồng Học Sinh Việt Nam
-
2022 Bài Tập Pascal: Phần Mảng 2 Chiều - Duy Pets
-
Sắp Xếp Mảng Hai Chiều Trong Pascal - Code9.Info
-
Bài 57. Cách Sắp Xếp Mảng Hai Chiều Tăng Dần Hoặc Giảm Dần
-
Bài Tập Pascal Về Mảng 2 Chiều - 123doc
-
LTC 57. Cách Sắp Xếp Mảng Hai Chiều Tăng Dần Hoặc Giảm Dần
-
Sắp Xếp Mảng [Archive] - Diễn Đàn Tin Học
-
Lập Trình C: Cách Sắp Xếp Mảng 2 Chiều | V1Study
-
Học Pascal Cùng J[p6] - THPT Quang Hà