1. Trang chủ
  2. » Thể loại khác

Bia 12

50 101 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 545 KB

Nội dung

LỜI CẢM ƠN Trên thực tế khơng có thành công mà không gắn liền với hổ trợ , giúp đở dù hay nhiều , dù trực tiếp hay gián tiếp người khác Trong suốt thời gian từ bắt đầu làm tập lớn môn lập trình hướng đối tượng , chúng em nhận nhiều quan tâm giúp đở quý thầy bạn bè Với lòng biết ơn sâu sắc chúng em xin gửi đến quí thầy cô giảng viên khoa công nghệ thông tin trường Đại học Giao thông Vận tải phân hiệu thành phố Hồ Chí Minh nói chung đặc biệt thầy Trần Phong Nhã nói riêng Thầy tận tình truyền đạt kiến thức vơ q báo cho em , giúp em có thêm nguồn kiến thức để hồn thiện tập lớn hồn thành thật tốt Giúp em có kinh nghiệm việc làm tập lớn , báo cáo , củng rèn luyện thêm cho em kỷ cần thiết giảng đường đại học lẩn công việc sau Thời gian làm tập lớn vỏn vẹn ba tuần Đây lần em làm tập lớn không tránh khỏi bỡ ngở nguồn kiến thức em nhiều hạn chế Do thiếu sót điều tránh khỏi Em mong nhận góp ý q báo từ thầy bạn để hồn thiện tập lớn lần xa báo cáo tốt nghiệp Một lần em xin chân thành cảm ơn Tp.Hồ Chí Minh, Ngày 18/11/2016 LỜI NĨI ĐẦU Ngày Cơng nghệ thơng tin phát triển với tốc độ nhanh chóng Cơng nghệ thông tin ứng dụng nhiều lĩnh vực nghiên cứu khoa học, phát triển kinh tế, quân nhiều loại hình nghệ thuật khác Ở nước tiên tiến, máy tính ứng dụng nhiều lĩnh vực nhằm phục vụ cho lợi ích người Việc liên lạc tìm kiếm thơng tin khơng bị cản trở Mọi người giới gắn kết với nhờ công nghệ thông tin Tất nước có Việt Nam cố gắng tìm cách áp dụng thành tựu Công nghệ thông tin vào việc phát triển kinh tế- xã hội Ở nước ta có nhiều ứng dụng áp dụng thực tiển , thuật toán xếp thuật tốn quan trọng kiến thức khơng thể thiếu khoa học máy tính ứng dụng nhiều lập trình,chính em chọn đề tài mơ lại thuật tốn xếp cách sử dụng giao diện Mặc dù cố gắng để hoàn thành tốt tập lớn , thời gian có hạn thiết kinh nghiệm kỹ thuật nhiều thiếu sót hạn chế nên việc phân tích thiết kế nhiều thiếu sót, em mong nhận góp ý quý báo thầy bạn để em hoàn thiện cho tập lớn tốt Em xin chân thành cảm ơn! Tp.Hồ Chí Minh, Ngày 18/11/2016 MỤC LỤC 1.Thuật toán 1.1 Khái niệm thuật toán 2.Tổng quan thuật toán xếp 1.1Giới thiệu thuật toán xếp 1.2 Sơ lược số thuật toán xếp 1.2.1 Thuật toán xếp bọt (Bubble Sort) 1.2.2 Thuật toán xếp chèn (Insert-Sort) 1.2.3 Thuật toán xếp chọn (Selection-Sort) 1.2.4 Thuật toán xếp trộn (Merge-Sort) 1.2.5 Thuật toán xếp nhanh (Quick-Sort) 1.2.6 Thuật toán vun đống (Heap Sort) 1.3 Một số hình ảnh minh họa thuật toán xếp .3 2.Phân tích cài đặt thuật tốn xếp có tập lớn 2.1Thuật toán xếp bọt (Bubble Sort) 2.1.1 Ý tưởng 2.1.2 Giải thuật .6 2.1.3 Cài đặt code C/C++ .6 2.1.4 Giảm bớt vòng duyệt 2.2Thuật toán xếp chèn (Insert-Sort) 2.2.1 Ý tưởng: 2.2.2Giải thuật 2.2.3Cài đặt code C/C++  2.2.4Đánh giá giải thuật: 10 2.3Thuật toán xếp chọn (Selection-Sort) 10 2.3.1 Ý tưởng 10 2.3.2Giải thuật .11 2.3.3Cài đặt code C/C++ 11 2.3.4Đánh giá thuật toán 13 2.4Thuật toán xếp trộn (Merge-Sort) .13 2.4.1Trộn trực tiếp: .13 2.4.2Thuật toán: 13 2.4.3/ Cài đặt code C/C++: 14 2.4.4/ Đánh giá 16 2.5Thuật toán xếp nhanh (Quick-Sort) 16 2.5.1Ý tưởng 16 2.5.2Giải thuật 17 2.5.3Cài đặt code C/C++ 17 2.5.4 Đánh giá thuật toán .19 2.6Thuật toán vun đống (Heap Sort) .20 2.6.1Ý tưởng 20 2.6.2Giải thuật 20 2.6.3 Cài đặt code C/C++ .20 Mơ lại thuật tốn xếp giao điện 22 3.1 Giới thiệu chung giao diện mô 22 3.2 Cài đặt chương trình mơ 23 3.2.1 Chương trình khởi tạo giao diện 23 3.2.2 Cài đặt giao diện mô 23 Ứng dụng thuật toán xếp 44 Tài liệu tham khảo .45 Nội Dung Báo Cáo 1.Thuật toán 1.1 Khái niệm thuật toán Thuật toán dãy hữu hạn thao tác xếp theo trình tựxác định cho sau thực dãy thao tác ấy, từInput toán ta nhận Output cần tìm Cũng xem thuật tốn cơng cụđể gi ải tốn cụ thể Phát biểu toán định tổng quát mối quan hệ Input/Output cần thiết Thuật tốn mơ tảmột thủtục tính tốn cụthểđểđạt mối quan hệInput/Output 2.Tổng quan thuật toán xếp 1.1Giới thiệu thuật tốn xếp Trong khoa học máy tính toán học, thuật toán xếp thuật toán xếp phần tử danh sách (hoặc mảng) theo thứ tự tăng (hoặc giảm) Người ta thường xét trường hợp phần tử cần xếp số Sắp xếp trình xử lý danh sách phần tử (hoặc mẫu tin) để đặt chúng theo thứ tự thỏa mãn tiêu chuẩn dựa nội dung thông tin lưu giữ phần tử Mức độ hiệu giải thuật phụ thuộc vào tính chất cấu trúc liệu cụ thể mà tác động đến Có nhiều giải thuật xếp: Selection sort, Insertion sort, Interchange sort, Bubble sort, Shaker sort, Binary Insertion sort, Shell sort, Heap sort, Quick sort, Merge sort, Radix sort… 1.2 Sơ lược số thuật toán xếp Có nhiều giải thuật xếp: Selection sort, Insertion sort, Interchange sort, Bubble sort, Shaker sort, Binary Insertion sort, Shell sort, Heap sort, Quick sort, Merge sort, Radix sort… Nhưng chúng em chĩ vận dụng số giải thuật xếp vào tập lớn sau sơ lược giải thuật xếp đó: 1.2.1 Thuật toán xếp bọt (Bubble Sort) Là thuật toán xếp đơn giản, với thao tác so sánh hai phần tử kề nhau, chúng chưa đứng thứ tự đổi chỗ (swap) Có thể tiến hành từ xuống (bên trái sang) từ lên (bên phải sang) Sắp xếp bọt có tên xếp so sánh trực tiếp Nó sử dụng phép so sánh phần tử nên giải thuật xếp kiểu so sánh 1.2.2 Thuật toán xếp chèn (Insert-Sort) Là thuật toán xếp bắt chước cách xếp quân người chơi Muốn theo trật tự người chơi rút từ quân thứ 2, so với quân đứng trước để chèn vào vị trí thích hợp 1.2.3 Thuật toán xếp chọn (Selection-Sort) Là Chọn phần tử nhỏ n phần tử ban đầu, đưa phần tử vị trí dãy hành Sau khơng quan tâm đến nữa, xem dãy hành n-1 phần tử dãy ban đầu, vị trí thứ Lặp lại trình cho dãy hành đến dãy hành phần tử Dãy ban đầu có n phần tử, tóm tắt ý tưởng thuật toán thực n-1 lượt việc đưa phần tử nhỏ dãy hành vị trí đầu dãy 1.2.4 Thuật tốn xếp trộn (Merge-Sort) Là thuật toán xếp để xếp danh sách (hoặc cấu trúc liệu truy cập tuần tự, v.d luồng tập tin) theo trật tự Nó xếp vào thể loại xếp so sánh Thuật tốn ví dụ tương đối điển hình lối thuật toán chia để trị doJohn von Neumann đưa lần đầu năm 1945[1] Một thuật toán chi tiết Goldstine Neumann đưa năm 1948.[2] 1.2.5 Thuật toán xếp nhanh (Quick-Sort) Là xếp kiểu phân chia (part sort) thuật toán xếp phát triển C.A.R Hoarec thành hai danh sách Khác với xếp trộn, chia danh sách cần xếp thành hai danh sách có kích thước tương đối nhờ số đứng danh sách, xếp nhanh chia thành hai danh sách cách so sánh phần tử danh sách với phần tử chọn gọi phần tử chốt Những phần tử nhỏ phần tử chốt đưa phía trước nằm danh sách thứ nhất, phần tử lớn chốt đưa phía sau thuộc danh sách đứng sau Cứ tiếp tục chia tới danh sách có độ dài 1.2.6 Thuật toán vun đống (Heap Sort) Sắp xếp vun đống (Heapsort) dựa cấu trúc liệu gọi đống nhị phân (binary heap), gọi đơn giản đống 1.3 Một số hình ảnh minh họa thuật toán xếp H1.Minh họa thuật toán xếp trộn H2.Minh họa thuật toán xếp bọt H3.Minh họa thuật toán xếp chọn H4.Minh họa thuật toán xếp vun đống H5.Minh hoa thuật toán xếp nhanh H6.Minh họa thuật toán xếp chèn 2.Phân tích cài đặt thuật tốn xếp có tập lớn 2.1Thuật tốn xếp bọt (Bubble Sort) 2.1.1 Ý tưởng Ý tưởng thuật tốn xuất phát từ cuối (hoặc đầu) dãy, đổi chổ cặp phần tử kế cận để đưa phần tử nhỏ (lớn) cặp phần tử vị trí đầu (cuối) dãy hành, sau khơng xét đến vị trí tiếp theo, lần xử lý thứ i có vị trí đầu dãy i Lặp lại xử lý khơng cặp phần tử để xét 2.1.2 Giải thuật Bước 1: i=1; //Phần tử Bước 2: Lần lượt so sánh đổi chổ (nếu cần) từ phải sang trái phần từ từ Array[n] đến Array[i] Bước 3: i=i+1 Bước 4: * Nếu i < n, quay lại Bước * Ngược lại, dừng, dãy cho xếp vị trí 2.1.3 Cài đặt code C/C++ void NhapDay(int a[],int n) { for(int i=0; iTabIndex = 7; this->btn_inday->Text = L"In Dãy"; this->btn_inday->UseVisualStyleBackColor = true; this->btn_inday->Click += gcnew System::EventHandler(this, &MyForm::btn_inday_Click); // // btn_xoa // this->btn_xoa->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(192)), static_cast(static_cast(255)), static_cast(static_cast(255))); this->btn_xoa->ForeColor = System::Drawing::Color::FromArgb(static_cast(static_cast(0)), static_cast(static_cast(0)), static_cast(static_cast(192))); this->btn_xoa->Location = System::Drawing::Point(519, 125); this->btn_xoa->Name = L"btn_xoa"; this->btn_xoa->Size = System::Drawing::Size(84, 27); this->btn_xoa->TabIndex = 8; this->btn_xoa->Text = L"Xóa Dãy"; 32 this->btn_xoa->UseVisualStyleBackColor = true; this->btn_xoa->Click += gcnew System::EventHandler(this, &MyForm::btn_xoa_Click); // // btn_thoat // this->btn_thoat->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(192)), static_cast(static_cast(255)), static_cast(static_cast(255))); this->btn_thoat->ForeColor = System::Drawing::Color::FromArgb(static_cast(static_cast(0)), static_cast(static_cast(0)), static_cast(static_cast(192))); this->btn_thoat->Location = System::Drawing::Point(621, 125); this->btn_thoat->Name = L"btn_thoat"; this->btn_thoat->Size = System::Drawing::Size(75, 27); this->btn_thoat->TabIndex = 9; this->btn_thoat->Text = L"Thoát"; this->btn_thoat->UseVisualStyleBackColor = true; // // ric_ketqua // this->ric_ketqua->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(255)), static_cast(static_cast(192)), static_cast(static_cast(255))); this->ric_ketqua->Location = System::Drawing::Point(355, 181); this->ric_ketqua->Name = L"ric_ketqua"; this->ric_ketqua->Size = System::Drawing::Size(195, 139); this->ric_ketqua->TabIndex = 10; this->ric_ketqua->Text = L""; 33 // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(280, 222); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(49, 13); this->label1->TabIndex = 11; this->label1->Text = L"Kết Quả:"; // // btn_nhap // this->btn_nhap->AccessibleDescription = L""; this->btn_nhap->AccessibleName = L""; this->btn_nhap->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast(0))); this->btn_nhap->ForeColor = System::Drawing::Color::Purple; this->btn_nhap->Location = System::Drawing::Point(274, 67); this->btn_nhap->Name = L"btn_nhap"; this->btn_nhap->Size = System::Drawing::Size(79, 23); this->btn_nhap->TabIndex = 12; this->btn_nhap->Text = L"Lấy Số"; this->btn_nhap->UseVisualStyleBackColor = false; this->btn_nhap->Click += gcnew System::EventHandler(this, &MyForm::btn_nhap_Click); // // MyForm // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 34 this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->BackColor = System::Drawing::Color::FromArgb(static_cast(static_cast(192)), static_cast(static_cast(255)), static_cast(static_cast(255))); this->ClientSize = System::Drawing::Size(739, 332); this->Controls->Add(this->btn_nhap); this->Controls->Add(this->label1); this->Controls->Add(this->ric_ketqua); this->Controls->Add(this->btn_thoat); this->Controls->Add(this->btn_xoa); this->Controls->Add(this->btn_inday); this->Controls->Add(this->btn_sapxep); this->Controls->Add(this->nutlenh); this->Controls->Add(this->label3); this->Controls->Add(this->rad_sapxepnhanh); this->Controls->Add(this->rad_sapxepvundong); this->Controls->Add(this->rad_sapxeptron); this->Controls->Add(this->rad_sapxepnoibot); this->Controls->Add(this->rad_sapxepchon); this->Controls->Add(this->rad_sapxepchen); this->Controls->Add(this->txt_nhap); this->Controls->Add(this->label2); this->Controls->Add(this->Main); this->Name = L"MyForm"; this->Text = L"MyForm"; this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load); this->ResumeLayout(false); this->PerformLayout(); 35 } #pragma endregion //Bắt Đầu Viêt code void LTHDT::MyForm::swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } //Insertionsort void LTHDT::MyForm::Insertionsort() { this->ric_ketqua->Text += "\n Sap xep theo Insertion sort: \n\r"; for (int i = 1; i < n; i++) { for (int j = i; j > 0; j ) if (p[j] < p[j - 1]) { swap(&p[j], &p[j - 1]); // in bước thực thuật toán for (int i = 0; i < n; i++) this->ric_ketqua->Text += p[i] + " "; this->ric_ketqua->Text += "\n"; } } } //Selectionsort 36 void LTHDT::MyForm::Selectionsort() { int min; this->ric_ketqua->Text += "\n Sap xep theo Selection sort: \n\r"; for (int i = 0; i < n - 1; i++) { = i; for (int j = i + 1; j < n; j++) { if (p[j] < p[min]) = j; } if (min != i) { swap(&p[i], &p[min]); // in bước thực thuật toán for (int i = 0; i < n; i++) this->ric_ketqua->Text += p[i] + " "; this->ric_ketqua->Text += "\n"; } } } //Bubblesort void LTHDT::MyForm::Bubblesort() { this->ric_ketqua->Text +="\n Sap xep theo Bubblesort: \n\r"; for (int i = 0; ip[j]) { swap(&p[i], &p[j]); // in bước thực thuật toán for (int i = 0; i < n; i++) { this->ric_ketqua->Text += p[i] + " "; } this->ric_ketqua->Text += "\n"; 37 } } } //Heapsort: Bước1 void LTHDT::MyForm::Heapify(int *p, int n, int i) { int Left = * (i + 1) - 1; int Right = * (i + 1); int Largest; if (Leftp[i]) Largest = Left; else Largest = i; if (Rightp[Largest]) Largest = Right; if (i != Largest) { swap(&p[i], &p[Largest]); Heapify(p, n, Largest); } } //heapsort: Bước void LTHDT::MyForm::BuidHeap(int *p, int n) { for (int i = (n / 2) - 1; i >= 0; i ) Heapify(p, n, i); } //Hoàn thành Heapsort void LTHDT::MyForm::Heapsort() { this->ric_ketqua->Text += "\n Sap xep theo Heap sort: \n\r"; BuidHeap(p, n); for (int i = n - 1; i > 0; i ) { swap(&p[0], &p[i]); 38 // in bước thực thuật toán for (int i = 0; iric_ketqua->Text += p[i] + " "; this->ric_ketqua->Text += "\n"; Heapify(p, i, 0); } } //Mergesort: Bước void LTHDT::MyForm::Merger(int *p, int start, int end) { int mid = (start + end) / 2; int i = start; int j = mid + 1; int temp; while (i i; k ) p[k] = p[k - 1]; p[i] = temp; j++; } i++; } } //Mergersort: Bước int LTHDT::MyForm::Merger(int *p, int start, int end, int n) { if (end - start < 1) return 0; int mid = (start + end) / 2; 39 // in bước thực thuật toán for (int i = 0; iric_ketqua->Text += p[i] + " "; this->ric_ketqua->Text += "\n"; Merger(p, start, mid); Merger(p, mid + 1, end); Merger(p, start, end); } //Hoàn thành Mergersort void LTHDT::MyForm::Mergert() { int *p; int n; this->ric_ketqua->Text += "\n Sap xep theo Merger sort: \n\r"; Merger(p, 0, n - 1); for (int i = 0; iric_ketqua->Text += p[i] + " "; } // Quicksort: Bước int LTHDT::MyForm::Quicksort(int *p, int left, int right) { int pivot = p[left]; int i = left + 1; int j = right; { while (i Text += "\n Sap xep theo Quick sort: \n\r"; Quicksort(p, 0, n - 1); } private: System::Void btn_nhap_Click(System::Object^ sender, System::EventArgs^ e) { try { p[n] = Convert::ToInt32(this->txt_nhap->Text); n++; this->txt_nhap->ResetText(); 41 this->txt_nhap->Focus(); } catch (Exception^ex) { MessageBox::Show(" Ban hay nhap vao tung so nguyen y! \n\r < 10 ki tu \n\r nhap toi da 100 phan tu "); this->txt_nhap->Clear(); } } //in đưa bảng Kết private: System::Void btn_inday_Click(System::Object^ sender, System::EventArgs^ e) { if (n == 0) { this->ric_ketqua->Text = ("Chua co mang"); } else { this->ric_ketqua->Text += ("Cac phan tu mang: \r\n"); for (int i = 0; i < n; i++) { this->ric_ketqua->Text += p[i] + " "; } } } private: System::Void txt_nhap_TextChanged(System::Object^ sender, System::EventArgs^ e) { } private: System::Void btn_xoa_Click(System::Object^ sender, System::EventArgs^ e) { 42 this->ric_ketqua->Text = " "; n = 0; this->txt_nhap->Focus(); } // xếp private: System::Void btn_sapxep_Click(System::Object^ sender, System::EventArgs^ e) { if (n == 0) { this->ric_ketqua->Text = "Mang chua co gia tri nen khong the sap xep! "; } else if (n == || n == 2) { this->ric_ketqua->Text += "\n Mang ban nhap khong hop le! "; } else if (rad_sapxepchen->Checked == true) { Insertionsort(); } else if (rad_sapxepchon->Checked == true) { Selectionsort(); } else if (rad_sapxepnoibot->Checked == true) { Bubblesort(); } else if (rad_sapxepvundong->Checked == true) { Heapsort(); } else if (rad_sapxeptron->Checked == true) { Mergert(); } else if (rad_sapxepnhanh->Checked == true) { Quicksort(); 43 } } private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { } }; Ứng dụng thuật toán xếp Ứng dụng xếp có khắp nơi: -Một danh sách lớp với học sinh xếp theo thứ tự bảng chữ -Một danh bạ điện thoại -Danh sách truy vấn tìm kiếm nhiều Google Thuật toán xếp dùng kết hợp với thuật tốn khác, tìm kiếm nhị phân, thuật tốn Kruskal để tìm khung nhỏ đồ thị 44 Tài liệu tham khảo [1] http://vlo.vn/t/thuat-toan-sap-xep-nhanh/ [2] http://windybook.com/thuat-toan-thuat-toan-sap-xep-phan-4/ [3] Lập trình Hướng Đối Tượng C++ - Phạm Văn Ất(Chủ biên) –Nguyễn Hiếu Cường [4] http://vnoi.info/wiki/algo/basic/sorting 45 46 ... cfree5 { int a[max],n; coutn; NhapDay(a,n); coutName = L"Main"; this->Main->Size = System::Drawing::Size(433, 29); this->Main->TabIndex... System::Drawing::GraphicsUnit::Point, static_cast(0))); this->label2->Location = System::Drawing::Point (12, 66); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(131, 18); this->label2->TabIndex

Ngày đăng: 05/11/2019, 11:35

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w