CODE NÀY CHẠY CHUẨN TRÊN Visual Studio, NẾU CHẠY TRÊN Borland C THÌ SẼ PHẢI FIX MỘT VÀI CHỖ !
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
typedef struct nv
{
int ms;
char ten[20];
float luong;
};
void nhapn(int &n)
{
do
{
printf("\nNhap so NV: ");
scanf("%d", &n);
if (n < 1) printf("\nNhap sai. Nhap lai.");
} while (n < 1);
}
void nhap(nv &a)
{
printf("\nNhap ma so: ");
scanf("%d",&a.ms);
fflush(stdin);
printf("\nNhap ten: ");
gets(a.ten);
fflush(stdin);
printf("\nNhap luong: ");
scanf("%f", &a.luong);
fflush(stdin);
}
void xuat(nv &a)
{
printf("\nMS: %d", a.ms);
printf("\nTen: %s", a.ten);
printf("\nLuong: %.3f", a.luong);
}
void nhapnv(nv a[], int n)
{
printf("\n\n---------------HAY NHAP CAC NHAN VIEN---------------");
for (int i = 0; i < n; i++)
nhap(a[i]);
}
void xuatnv(nv a[], int n)
{
for (int i = 0; i < n; i++)
{
xuat(a[i]);
printf("\n");
}
}
void swap(nv &a, nv &b)
{
nv c = a;
a = b;
b = c;
}
void InterchangeSortUpMS(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (a[i].ms > a[j].ms)
swap(a[i], a[j]);
}
void InterchangeSortDownMS(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (a[i].ms < a[j].ms)
swap(a[i], a[j]);
}
void InterchangeSortUpTEN(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (strcmp(a[i].ten,a[j].ten)==1)
swap(a[i], a[j]);
}
void InterchangeSortDownTEN(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (strcmp(a[i].ten,a[j].ten)==-1)
swap(a[i], a[j]);
}
void BubbleSortUpMS(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = n-1; j >i; j--)
if (a[j].ms > a[j-1].ms)
swap(a[j-1], a[j]);
}
void BubbleSortDownMS(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; j >i; j--)
if (a[j].ms < a[j - 1].ms)
swap(a[j], a[j - 1]);
}
void BubbleSortDownTEN(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; j >i; j--)
if (strcmp(a[j].ten, a[j - 1].ten)==1)
swap(a[j - 1], a[j]);
}
void BubbleSortUpTEN(nv a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; j >i; j--)
if (strcmp(a[j - 1].ten,a[j].ten)==1)
swap(a[j], a[j - 1]);
}
void SelectionSortUpMS(nv a[], int n)
{
int i;
for (i = 0; i < n - 1; i++)
{
int vtmin = i;
for (int j = i + 1; j < n; j++)
if (a[j].ms < a[vtmin].ms)
vtmin = j;
swap(a[vtmin], a[i]);
}
}
void SelectionSortDownMS(nv a[], int n)
{
int i;
for (i = 0; i < n - 1; i++)
{
int vtmax = i;
for (int j = i + 1; j < n; j++)
if (a[j].ms > a[vtmax].ms)
vtmax = j;
swap(a[vtmax], a[i]);
}
}
void SelectionSortUpTEN(nv a[], int n)
{
int i;
for (i = 0; i < n - 1; i++)
{
int vtmin = i;
for (int j = i + 1; j < n; j++)
if (strcmp(a[j].ten, a[vtmin].ten)==-1)
vtmin = j;
swap(a[vtmin], a[i]);
}
}
void SelectionSortDownTEN(nv a[], int n)
{
int i;
for (i = 0; i < n - 1; i++)
{
int vtmin = i;
for (int j = i + 1; j < n; j++)
if (strcmp(a[j].ten, a[vtmin].ten) == 1)
vtmin = j;
swap(a[vtmin], a[i]);
}
}
void InsertionSortUpMS(nv a[], int n)
{
int pos;
nv x;
for (int i = 1; i < n; i++)
{
x = a[i];
pos = i - 1;
while (pos >= 0 && a[pos].ms>x.ms)
{
a[pos + 1] = a[pos];
pos--;
}
a[pos + 1] = x;
}
}
void InsertionSortDownMS(nv a[], int n)
{
int pos;
nv x;
for (int i = 1; i < n; i++)
{
x = a[i];
pos = i - 1;
while (pos >= 0 && a[pos].ms<x.ms)
{
a[pos + 1] = a[pos];
pos--;
}
a[pos + 1] = x;
}
}
void InsertionSortUpTEN(nv a[], int n)
{
int pos;
nv x;
for (int i = 1; i < n; i++)
{
x = a[i];
pos = i - 1;
while (pos >= 0 && strcmp(a[pos].ten,x.ten)==1)
{
a[pos + 1] = a[pos];
pos--;
}
a[pos + 1] = x;
}
}
void InsertionSortDownTEN(nv a[], int n)
{
int pos;
nv x;
for (int i = 1; i < n; i++)
{
x = a[i];
pos = i - 1;
while (pos >= 0 && strcmp(a[pos].ten, x.ten) == -1)
{
a[pos + 1] = a[pos];
pos--;
}
a[pos + 1] = x;
}
}
void ShellSortUpMS(nv a[], int n, int h[], int k)
{
int count = 0;
int step, i, pos, len;
nv x;
for (step = 0; step < k; step++)
{
len = h[step];
for (i = len; i<n; i++)
{
x = a[i];
pos = i - len;
while ((x.ms < a[pos].ms) && (pos >= 0))
{
a[pos + len] = a[pos];
pos = pos - len;
count++;
}
a[pos + len] = x;
}
}
}
void ShellSortDownMS(nv a[], int n, int h[], int k)
{
int count = 0;
int step, i, pos, len;
nv x;
for (step = 0; step < k; step++)
{
len = h[step];
for (i = len; i<n; i++)
{
x = a[i];
pos = i - len;
while ((x.ms > a[pos].ms) && (pos >= 0))
{
a[pos + len] = a[pos];
pos = pos - len;
count++;
}
a[pos + len] = x;
}
}
}
void ShellSortUpTEN(nv a[], int n, int h[], int k)
{
int count = 0;
int step, i, pos, len;
nv x;
for (step = 0; step < k; step++)
{
len = h[step];
for (i = len; i<n; i++)
{
x = a[i];
pos = i - len;
while (strcmp(x.ten , a[pos].ten)==-1 && (pos >= 0))
{
a[pos + len] = a[pos];
pos = pos - len;
count++;
}
a[pos + len] = x;
}
}
}
void ShellSortDownTEN(nv a[], int n, int h[], int k)
{
int count = 0;
int step, i, pos, len;
nv x;
for (step = 0; step < k; step++)
{
len = h[step];
for (i = len; i<n; i++)
{
x = a[i];
pos = i - len;
while (strcmp(x.ten, a[pos].ten) == 1 && (pos >= 0))
{
a[pos + len] = a[pos];
pos = pos - len;
count++;
}
a[pos + len] = x;
}
}
}
void QuickSortUpMS(nv a[], int l, int r)
{
if (l >= r) return;
int i = l;
int j = r;
nv x = a[(l + r) / 2];//x=A[random(l-r)]
while (i <= j)
{
while (a[i].ms<x.ms) i++;
while (a[j].ms>x.ms) j--;
if (i <= j)
{
swap(a[i], a[j]);
i++; j--;
}
}
QuickSortUpMS(a, l, j);
QuickSortUpMS(a, i, r);
}
void QuickSortDownMS(nv a[], int l, int r)
{
if (l >= r) return;
int i = l;
int j = r;
nv x = a[(l + r) / 2];//x=A[random(l-r)]
while (i <= j)
{
while (a[i].ms>x.ms) i++;
while (a[j].ms<x.ms) j--;
if (i <= j)
{
swap(a[i], a[j]);
i++; j--;
}
}
QuickSortDownMS(a, l, j);
QuickSortDownMS(a, i, r);
}
void QuickSortUpTEN(nv a[], int l, int r)
{
if (l >= r) return;
int i = l;
int j = r;
nv x = a[(l + r) / 2];//x=A[random(l-r)]
while (i <= j)
{
while (strcmp(a[i].ten,x.ten)==-1) i++;
while (strcmp(a[j].ten,x.ten)==1) j--;
if (i <= j)
{
swap(a[i], a[j]);
i++; j--;
}
}
QuickSortUpTEN(a, l, j);
QuickSortUpTEN(a, i, r);
}
void QuickSortDownTEN(nv a[], int l, int r)
{
if (l >= r) return;
int i = l;
int j = r;
nv x = a[(l + r) / 2];//x=A[random(l-r)]
while (i <= j)
{
while (strcmp(a[i].ten,x.ten)==1) i++;
while (strcmp(a[j].ten,x.ten)==-1) j--;
if (i <= j)
{
swap(a[i], a[j]);
i++; j--;
}
}
QuickSortDownTEN(a, l, j);
QuickSortDownTEN(a, i, r);
}
void MergeSortUpMS(nv a[], int n)
{
int i, j, k, low1, up1, low2, up2, size;
nv dstam[MAX];
size = 1;
while (size <n)
{
low1 = 0;
k = 0;
while (low1 + size < n)
{
low2 = low1 + size;
up1 = low2 - 1;
up2 = (low2 + size - 1 < n) ? (low2 + size - 1) : (n - 1);
for (i = low1, j = low2; i <= up1 && j <= up2; k++)
if (a[i].ms <= a[j].ms) dstam[k] = a[i++];
else dstam[k] = a[j++];
for (; i <= up1; k++) dstam[k] = a[i++];
for (; j <= up2; k++) dstam[k] = a[j++];
low1 = up2 + 1;
}
for (i = low1; k<n; i++) dstam[k++] = a[i];
for (i = 0; i<n; i++) a[i] = dstam[i];
size *= 2;
}
}
void MergeSortDownMS(nv a[], int n)
{
int i, j, k, low1, up1, low2, up2, size;
nv dstam[MAX];
size = 1;
while (size <n)
{
low1 = 0;
k = 0;
while (low1 + size < n)
{
low2 = low1 + size;
up1 = low2 - 1;
up2 = (low2 + size - 1 < n) ? (low2 + size - 1) : (n - 1);
for (i = low1, j = low2; i <= up1 && j <= up2; k++)
if (a[i].ms >= a[j].ms) dstam[k] = a[i++];
else dstam[k] = a[j++];
for (; i <= up1; k++) dstam[k] = a[i++];
for (; j <= up2; k++) dstam[k] = a[j++];
low1 = up2 + 1;
}
for (i = low1; k<n; i++) dstam[k++] = a[i];
for (i = 0; i<n; i++) a[i] = dstam[i];
size *= 2;
}
}
void MergeSortUpTEN(nv a[], int n)
{
int i, j, k, low1, up1, low2, up2, size;
nv dstam[MAX];
size = 1;
while (size <n)
{
low1 = 0;
k = 0;
while (low1 + size < n)
{
low2 = low1 + size;
up1 = low2 - 1;
up2 = (low2 + size - 1 < n) ? (low2 + size - 1) : (n - 1);
for (i = low1, j = low2; i <= up1 && j <= up2; k++)
if (strcmp(a[i].ten, a[j].ten) == -1 || strcmp(a[i].ten, a[j].ten) == 0)
dstam[k] = a[i++];
else dstam[k] = a[j++];
for (; i <= up1; k++) dstam[k] = a[i++];
for (; j <= up2; k++) dstam[k] = a[j++];
low1 = up2 + 1;
}
for (i = low1; k<n; i++) dstam[k++] = a[i];
for (i = 0; i<n; i++) a[i] = dstam[i];
size *= 2;
}
}
void MergeSortDownTEN(nv a[], int n)
{
int i, j, k, low1, up1, low2, up2, size;
nv dstam[MAX];
size = 1;
while (size <n)
{
low1 = 0;
k = 0;
while (low1 + size < n)
{
low2 = low1 + size;
up1 = low2 - 1;
up2 = (low2 + size - 1 < n) ? (low2 + size - 1) : (n - 1);
for (i = low1, j = low2; i <= up1 && j <= up2; k++)
if (strcmp(a[i].ten, a[j].ten) == 1 || strcmp(a[i].ten, a[j].ten) == 0) dstam[k] = a[i++];
else dstam[k] = a[j++];
for (; i <= up1; k++) dstam[k] = a[i++];
for (; j <= up2; k++) dstam[k] = a[j++];
low1 = up2 + 1;
}
for (i = low1; k<n; i++) dstam[k++] = a[i];
for (i = 0; i<n; i++) a[i] = dstam[i];
size *= 2;
}
}
void main(void)
{
int n, chon, k = 3;
int h[] = { 5, 3, 1 };
nv a[MAX];
nhapn(n);
nhapnv(a, n);
puts("Ban da nhap thanh cong Enter de tiep tuc!");
getch();
back:
system("cls");
puts("---------------HAY CHON 1 TRONG CAC CONG VIEC SAU---------------");
puts("1. Xuat danh sach cac nhan vien vua moi nhap.");
puts("2. Sap xep danh sach tang dan theo Ma So - Interchange Sort.");
puts("3. Sap xep danh sach giam dan theo Ma So - Interchange Sort.");
puts("4. Sap xep danh sach tang dan theo Ten - Interchange Sort.");
puts("5. Sap xep danh sach giam dan theo Ten - Interchange Sort.");
puts("6. Sap xep danh sach giam dan theo Ma So - Bubble Sort.");
puts("7. Sap xep danh sach tang dan theo Ma So - Bubble Sort.");
puts("8. Sap xep danh sach tang dan theo Ten - Bubblee Sort.");
puts("9. Sap xep danh sach giam dan theo Ten - Bubble Sort.");
puts("10. Sap xep danh sach tang dan theo Ma so - Selection Sort.");
puts("11. Sap xep danh sach giam dan theo Ma so - Selection Sort.");
puts("12. Sap xep danh sach tang dan theo Ten - Selection Sort.");
puts("13. Sap xep danh sach giam dan theo Ten - Selection Sort.");
puts("14. Sap xep danh sach tang dan theo Ma so - Insertion Sort.");
puts("15. Sap xep danh sach giam dan theo Ma so - Insertion Sort.");
puts("16. Sap xep danh sach tang dan theo Ten - Insertion Sort.");
puts("17. Sap xep danh sach giam dan theo Ten - Insertion Sort.");
puts("18. Sap xep danh sach tang dan theo Ma so - Shell Sort.");
puts("19. Sap xep danh sach giam dan theo Ma so - Shell Sort.");
puts("20. Sap xep danh sach tang dan theo TEN - Shell Sort.");
puts("21. Sap xep danh sach giam dan theo TEN - Shell Sort.");
puts("22. Sap xep danh sach tang dan theo Ma so - Quick Sort.");
puts("23. Sap xep danh sach giam dan theo Ma so - Quick Sort.");
puts("24. Sap xep danh sach tang dan theo Ten - Quick Sort.");
puts("25. Sap xep danh sach giam dan theo Ten - Quick Sort.");
puts("26. Sap xep danh sach tang dan theo Ma so - Merge Sort.");
puts("27. Sap xep danh sach giam dan theo Ma so - Merge Sort.");
puts("28. Sap xep danh sach tang dan theo Ten - Merge Sort.");
puts("29. Sap xep danh sach giam dan theo Ten - Merge Sort.");
puts("0. Exit");
printf("\nNhap 1 so: ");
scanf("%d", &chon);
switch (chon)
{
case 1:
system("cls");
puts("---XUAT DANH SACH NHAN VIEN---");
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 2:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - INTERCHANGE SORT---");
InterchangeSortUpMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 3:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - INTERCHANGE SORT---");
InterchangeSortDownMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 4:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - INTERCHANGE SORT---");
InterchangeSortUpTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 5:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - INTERCHANGE SORT---");
InterchangeSortDownTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 6:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - BUBBLE SORT---");
BubbleSortUpMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 7:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - BUBBLE SORT---");
BubbleSortDownMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 8:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - BUBBLE SORT---");
BubbleSortDownTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 9:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - BUBBLE SORT---");
BubbleSortUpTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 10:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - SELECTION SORT---");
SelectionSortUpMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 11:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - SELECTION SORT---");
SelectionSortDownMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 12:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - SELECTION SORT---");
SelectionSortUpTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 13:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - SELECTION SORT---");
SelectionSortDownTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 14:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - INSERTION SORT---");
InsertionSortUpMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 15:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - INSERTION SORT---");
InsertionSortDownMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 16:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - INSERTION SORT---");
InsertionSortUpTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 17:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - INSERTION SORT---");
InsertionSortDownTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 18:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - SHELL SORT---");
ShellSortUpMS(a, n, h, k);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 19:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - SHELL SORT---");
ShellSortDownMS(a, n, h, k);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 20:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - SHELL SORT---");
ShellSortUpTEN(a, n, h, k);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 21:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - SHELL SORT---");
ShellSortDownTEN(a, n, h, k);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 22:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - QUICK SORT---");
QuickSortUpMS(a, 0, n-1);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 23:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - QUICK SORT---");
QuickSortDownMS(a, 0, n - 1);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 24:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - QUICK SORT---");
QuickSortUpTEN(a, 0, n - 1);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 25:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - QUICK SORT---");
QuickSortDownTEN(a, 0, n - 1);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 26:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO MA SO - MERGE SORT---");
MergeSortUpMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 27:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO MA SO - MERGE SORT---");
MergeSortDownMS(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 28:
system("cls");
puts("---SX DANH SACH NHAN VIEN TANG DAN THEO TEN - MERGE SORT---");
MergeSortUpTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 29:
system("cls");
puts("---SX DANH SACH NHAN VIEN GIAM DAN THEO TEN - MERGE SORT---");
MergeSortDownTEN(a, n);
xuatnv(a, n);
puts("\nNhan phim bat ki de quay lai MENU !");
getch(); goto back;
case 0:
break;
}
getch();
}
Không có nhận xét nào:
Đăng nhận xét