
Untitled
Guest 783 26th Jul, 2019
#include <iostream>
#include <ctime>
#include <fstream>
#define MAX 100
using namespace std;
void CreateRndArr(int a[], int n)
{
int const l = 0, r = 99;
srand(time(0));
for (int i = 0; i < n; i++)
{
a[i] = l + rand() % (r - l + 1);
}
}
#pragma region Sort
void QuickSort(int a[], int left, int right){
int i, j, x, t;
x = a[(left + right) / 2]; i = left; j = right;
do{
while (a[i] < x) i++;
while (a[j] > x) j--;
if (i <= j) {
t = a[i]; a[i] = a[j]; a[j] = t;
i++; j--;
}
} while (i < j);
if (left < j) QuickSort(a, left, j);
if (i < right) QuickSort(a, i, right);
}
void Shift(int a[], int l, int r){
int i = l, j = 2 * i + 1, x = a[i];
while (j <= r){
if (j < r && a[j] < a[j + 1])
j++;
if (a[j] <= x)
return;
else {
a[i] = a[j]; a[j] = x;
i = j; j = 2 * i + 1; x = a[i];
}
}
}
void CreateHeap(int a[], int n){
int l = n / 2 - 1;
while (l >= 0) {
Shift(a, l, n - 1);
l = l - 1;
}
}
void HeapSort(int a[], int n){
int r;
CreateHeap(a, n);
r = n - 1;
while (r > 0) {
int t = a[0]; a[0] = a[r]; a[r] = t;
r--;
if (r > 0) Shift(a, 0, r);
}
}
void ShellSort(int a[], int n){
int i, j, x, h = 1;
while (h <= n / 3) h = h * 3 + 1;
while (h > 0){
for (i = h; i < n; i++){
x = a[i];
j = i - h;
while ((x < a[j]) && (j >= 0)){
a[j + h] = a[j]; j = j - h;
}
a[j + h] = x;
}
h = (h - 1) / 3;
}
}
void merge(int a[], int first, int mid, int last) {
int temp[MAX], first1, last1, first2, last2, i = first;
first1 = first; last1 = mid; first2 = mid + 1; last2 = last;
while ((first1 <= last1) && (first2 <= last2))
if (a[first1] < a[first2])
temp[i++] = a[first1++];
else
temp[i++] = a[first2++];
while (first1 <= last1) temp[i++] = a[first1++];
while (first2 <= last2) temp[i++] = a[first2++];
for (i = first; i <= last; i++)
a[i] = temp[i];
}
void mergeSort(int a[], int first, int last) {
if (first < last) {
int mid = int((first + last) / 2);
mergeSort(a, first, mid);
mergeSort(a, mid + 1, last);
merge(a, first, mid, last);
}
}
void RadixSort(int a[], int n){
const int m = 5;
int digit, num, h = 10, B[10][MAX], Len[10];
for (int d = 0; d < m; d++){
for (int i = 0; i < 10; i++) Len[i] = 0;
for (int i = 0; i < n; i++){
digit = (a[i] % h) / (h / 10);
B[digit][Len[digit]++] = a[i];
}
num = 0;
for (int i = 0; i < 10; i++)
for (int j = 0; j < Len[i]; j++)
a[num++] = B[i][j];
h *= 10;
}
}
#pragma endregion
void XuatArr(int a[], int n)
{
for (int i = 0; i < n; i++)
{
cout << a[i] << "\t";
}
}
int SequentialSearch(int A[], int n, int x)
{
for (int i = 0; i < n; i++)
if (A[i] == x) return 1;
return 0;
}
int BinarySearch(int a[], int n, int x)
{
int mid, left = 0, right = n - 1;
do
{
mid = (left + right) / 2;
if (a[mid] == x) return 1;
else
if (a[mid] < x) left = mid + 1;
else right = mid - 1;
} while (left <= right);
return 0;
}
void GhiFileText(int a[], int n)
{
fstream FileNumOut("sv.txt", ios::out);
if (FileNumOut.is_open()){
for (int i = 0; i < n; i++){
FileNumOut << a[i] << " ";
}
cout << "Ghi file thanh cong!" << endl;
}
else
cout << "\nKhong the mo file!" << endl;
FileNumOut.close();
}
void DocFileText(int a[], int n)
{
fstream FileNumIn("sv.txt", ios::in);
for (int i = 0; i < n; i++)
{
FileNumIn >> a[i];
}
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
FileNumIn.close();
}
void GhiFileBinary(int a[], int n)
{
fstream FileNumBinary("sv2.txt", ios::binary | ios::out);
if (FileNumBinary.is_open())
{
for (int i = 0; i < n; i++)
{
FileNumBinary.write(reinterpret_cast<char *>(&a[i]), sizeof(int));
}
cout << "Ghi file binary thang cong!" << endl;
}
else
cout << "Ghi file binary that bai!" << endl;
FileNumBinary.close();
}
void DocFileBinary(int a[], int n)
{
fstream FileNumBinary("sv2.txt", ios::binary | ios::in);
if (FileNumBinary.is_open())
{
FileNumBinary.read(reinterpret_cast<char*>(a), sizeof(int)*n);
cout << "\nDoc file binary thang cong!" << endl;
}
else
cout << "Doc file binary that bai!" << endl;
FileNumBinary.close();
XuatArr(a, n);
}
void Menu()
{
int a[100], n;
int sl;
cout << "Create Arr : " << endl;
cout << "Nhap vao so luong phan tu cua mang:= ";
cin >> n;
cout << endl;
CreateRndArr(a, n);
system("cls");
cout << "Mang khi chua sap xep!" << endl;
XuatArr(a, n);
cout << endl;
int sls, slr, slf, x;
do
{
bal:
cout << "1.Sort \n2.Search \n3.Read,Write File \n0.Exit" << endl;
cout << "Nhap vao lua chon:= ";
cin >> sl;
system("cls");
switch (sl)
{
case 1:
cout << "\n1.QuickSort \n2.HeapSort \n3.ShellSort \n4.MergeSort \n5.RadixSort \n0.Back" << endl;
cout << "Nhap vao lua chon:= ";
cin >> sls;
system("cls");
switch (sls)
{
case 1:
cout << "Mang sau khi sap xep voi QuickSort!" << endl;
QuickSort(a, 0, n - 1);
XuatArr(a, n);
cout << endl;
break;
case 2:
cout << "Mang sau khi sap xep voi HeapSort!" << endl;
HeapSort(a, n);
XuatArr(a, n);
cout << endl;
break;
case 3:
cout << "Mang sau khi sap xep voi ShellSort!" << endl;
ShellSort(a, n);
XuatArr(a, n);
cout << endl;
break;
case 4:
cout << "Mang sau khi sap xep voi MergeSort!" << endl;
mergeSort(a, 0, n - 1);
XuatArr(a, n);
cout << endl;
break;
case 5:
cout << "Mang sau khi sap xep voi RadixSort!" << endl;
RadixSort(a, n);
XuatArr(a, n);
cout << endl;
break;
default:
break;
}
break;
case 2:
cout << "1.Sequentia lSearch \n2.Binary Search \n0.Back" << endl;
cout << "Nhap vao lua chon:= ";
cin >> slr;
system("cls");
switch (slr)
{
case 1:
cout << "Tim kiem voi Sequential Search!" << endl;
cout << "Nhap vao phan tu muon tim:= ";
cin >> x;
if (SequentialSearch(a, n, x) == 1){
cout << x << " co trong mang!" << endl;
goto bal;
}
else{
cout << x << " khong co trong mang" << endl;
goto bal;
}
case 2:
cout << "Tim kiem voi Binary Search!" << endl;
cout << "Nhap vao phan tu muon tim:= ";
cin >> x;
if (BinarySearch(a, n, x) == 1){
cout << x << " co trong mang!" << endl;
goto bal;
}
else{
cout << x << " khong co trong mang" << endl;
goto bal;
}
default:
break;
}break;
case 3:
cout << "1.Write File \n2.Read File \n0.Back" << endl;
cout << "Nhap vao lua chon:= ";
cin >> slf;
switch (slf)
{
case 1:
cout << "Write File" << endl;
GhiFileText(a, n);
goto bal;
case 2:
cout << "Read File" << endl;
DocFileText(a, n);
goto bal;
default:
goto bal;
}
default:
break;
}
} while (sl == 1);
}
int main()
{
Menu();
/*GhiFileBinary(a, n);
DocFileBinary(a, n);*/
system("pause");
return 0;
}
C++
Description
No description
To share this paste please copy this url and send to your friends
RAW Paste Data