Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

#include <iostream>

#include <vector>
#include <cstdlib>
#include <ctime>

using namespace std;

void taomangngaunhien(vector<int>& arr, int n) {

srand(time(NULL));

for (int i = 0; i < n; i++) {


arr.push_back(rand() % 101);
}
}

void BubbleSort(vector<int>& arr) {


bool IsSorted = false;
for (int i = 0; i < arr.size() - 1 && !IsSorted; i++) {
IsSorted = true;
for (int j = 0; j < arr.size() - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
IsSorted = false;
}
}
}
}
void SelectionSort(vector<int>& arr) {
for (int i = 0; i < arr.size() - 1; i++) {
int MinIndex = i;
for (int j = i + 1; j < arr.size(); j++) {
if (arr[j] < arr[MinIndex]) {
MinIndex = j;
}
}
swap(arr[i], arr[MinIndex]);
}
}
void InsertionSort(vector<int>& arr) {
for (int i = 1; i < arr.size(); i++) {
int CurrentElement = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > CurrentElement) {
arr[j + 1] = arr[j];
j--;
}

arr[j + 1] = CurrentElement;
}
}
void InterchangeSort(vector<int>& arr) {
bool IsSorted = false;
for (int i = 0; i < arr.size() - 1 && !IsSorted; i++) {
IsSorted = true;
for (int j = 0; j < arr.size() - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
IsSorted = false;
}
}
}
}
int SapXepQuickSort(vector<int>& arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);

for (int j = low; j < high; j++) {


if (arr[j] <= pivot) {
i++;
swap(arr[i], arr[j]);
}
}

swap(arr[i + 1], arr[high]);


return (i + 1);
}
void QuickSort(vector<int>& arr, int low, int high) {
if (low < high) {
int pi = SapXepQuickSort(arr, low, high);

QuickSort(arr, low, pi - 1);


QuickSort(arr, pi + 1, high);
}
}
void SapXepMerge(vector<int>& arr, int low, int mid, int high) {
vector<int> left(arr.begin() + low, arr.begin() + mid + 1);
vector<int> right(arr.begin() + mid + 1, arr.begin() + high + 1);

int i = 0, j = 0, k = low;

while (i < left.size() && j < right.size()) {


if (left[i] <= right[j]) {
arr[k] = left[i];
i++;
} else {
arr[k] = right[j];
j++;
}
k++;
}

while (i < left.size()) {


arr[k] = left[i];
i++;
k++;
}

while (j < right.size()) {


arr[k] = right[j];
j++;
k++;
}
}
void MergeSort(vector<int>& arr, int low, int high) {
if (low < high) {
int mid = low + (high - low) / 2;
MergeSort(arr, low, mid);
MergeSort(arr, mid + 1, high);
SapXepMerge(arr, low, mid, high);
}
}

void InRaMang(const vector<int>& arr) {


cout << "[";
for (int i = 0; i < arr.size() - 1; i++) {
cout << arr[i] << ", ";
}
cout << arr[arr.size() - 1] << "]" << endl;
}

int main() {
int choice;
vector<int> arr;
do {
cout << endl;
cout << "CHUONG TRINH TAO MANG NGAU NHIEN VA SAP XEP MANG BANG THUAT
TOAN !!!"<<endl;
cout << "====================================================================";
cout << "\nMenu:\n";
cout << "1. Tao mang ngau nhien\n";
cout << "2. Sap xep mang bang thuat toan BubbleSort\n";
cout << "3. Sap xep mang bang thuat toan SelectionSort\n";
cout << "4. Sap xep mang bang thuat toan InsertionSort\n";
cout << "5. Sap xep mang bang thuat toan InterchangeSort\n";
cout << "6. Sap xep mang bang thuat toan QuickSort\n";
cout << "7. Sap xep mang bang thuat toan MergSort\n";
cout << "8. In ra mang\n";
cout << "9. Thoat\n";

cout << "===================================================================="<<endl;


cout << "Nhap lua chon cua ban: ";

cin >> choice;

switch (choice) {
case 1:
int n;
cout << "Nhap so phan tu: ";
cin >> n;
arr.clear();
taomangngaunhien(arr, n);
cout << "Tao mang ngau nhien.\n";
break;

case 2:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
BubbleSort(arr);
cout << "Mang duoc sap xep bang BubbleSort.\n";
}
break;

case 3:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
SelectionSort(arr);
cout << "Mang duoc sap xep bang SelectionSort.\n";
}
break;

case 4:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
InsertionSort(arr);
cout << "Mang duoc sap xep bang InsertionSort.\n";
}
break;
case 5:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
InterchangeSort(arr);
cout << "Mang duoc sap xep bang InterchangeSort.\n";
}
break;
case 6:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
QuickSort(arr, 0, arr.size() - 1);
cout << "Mang duoc sap xep bang QuickSort.\n";
}
break;
case 7:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
MergeSort(arr, 0, arr.size() - 1);
cout << "Mang duoc sap xep bang merge sort.\n";
}
break;
case 8:
if (arr.empty()) {
cout << "Mang trong vui long tao mot mang truoc.\n";
} else {
InRaMang(arr);
}
break;

case 9:
cout << "Thoat khoi chuong trinh...\n";
break;

default:
cout << "Lua chon khong hop le! Vui long chon so tu 1 den 9.\n";
}
} while (choice != 9);

return 0;
}

You might also like