public static void Main()
QuanLySinhVien quanLySinhVien = new QuanLySinhVien();
Console.WriteLine("Nhap so sinh vien can quan ly");
int length = Int32.Parse(Console.ReadLine());
public class QuanLySinhVien{
private SinhVien[] sinhVien;
private bool sort = false;
public void setSinhVien(SinhVien[] sinhVien){
this.sinhVien = sinhVien;
public SinhVien[] getSinhVien(){
public void swap(SinhVien[] sinhVien, int left, int right){
SinhVien temp = sinhVien[left];
sinhVien[left] = sinhVien[right];
public void heapify(SinhVien[] sinhVien, int position, int length){
int left = position * 2 + 1;
int right = position * 2 + 2;
if(left < length && sinhVien[left].getDiemTb() > sinhVien[max].getDiemTb()){
if(right < length && sinhVien[right].getDiemTb() > sinhVien[max].getDiemTb()){
swap(sinhVien, position, max);
heapify(sinhVien, max, length);
int length = sinhVien.Length;
for(int i = length / 2 - 1; i >= 0; i--){
heapify(sinhVien, i, length);
for(int i = length - 1; i >= 0; i--){
public void selectionSort(){
int length = sinhVien.Length;
for(int i = 0; i < length; i++){
for(int j = i + 1; j < length; j++){
if(sinhVien[smallest].getDiemTb() > sinhVien[j].getDiemTb()){
swap(sinhVien,i, smallest);
public void linearSearchMssv(int mssv){
int length = sinhVien.Length;
if(mssv == sinhVien[length - 1].getMssv()){
Console.WriteLine("Tim thay sinh vien tai vi tri: "+ (length - 1));
printInfoSinhVien(sinhVien[length - 1]);
int mssvTemp = sinhVien[length - 1].getMssv();
sinhVien[length - 1].setMssv(mssv);
while(sinhVien[i].getMssv() != mssv){
Console.WriteLine("Tim thay sinh vien tai vi tri: "+ i);
printInfoSinhVien(sinhVien[i]);
Console.WriteLine("Khong tim thay sinh vien co mssv: "+mssv);
public void linearSearchTen(String ten){
int length = sinhVien.Length;
if(ten.Equals(sinhVien[length - 1].getTen())){
Console.WriteLine("Tim thay sinh vien tai vi tri: "+ (length - 1));
printInfoSinhVien(sinhVien[length - 1]);
String tenTemp = sinhVien[length - 1].getTen();
sinhVien[length - 1].setTen(ten);
while(sinhVien[i].getTen().Equals(ten) == false){
Console.WriteLine("Tim thay sinh vien tai vi tri: "+ i);
printInfoSinhVien(sinhVien[i]);
Console.WriteLine("Khong tim thay sinh vien co ten: "+ten);
private void quickSort(SinhVien[] sinhVien, int left, int right){
int middle = findMiddle(sinhVien, left, right);
quickSort(sinhVien,left, middle - 1);
quickSort(sinhVien, middle + 1, right);
private int findMiddle(SinhVien[] sinhVien, int left, int right){
for(int i = left; i < right; i++){
if(sinhVien[i].getMssv() < sinhVien[right].getMssv()){
swap(sinhVien, ++middle, i);
swap(sinhVien, ++middle, right);
public void binarySearchMssv(int mssv){
int length = sinhVien.Length;
quickSort(sinhVien, 0, length - 1);
Console.WriteLine("Danh sach sinh vien");
int position = binarySearch(sinhVien, mssv, 0, length - 1);
Console.WriteLine("Tim thay sinh vien tai vi tri: "+position);
printInfoSinhVien(sinhVien[position]);
Console.WriteLine("Khong tim thay sinh vien co mssv: "+mssv);
public int binarySearch(SinhVien[] sinhVien,int mssv, int left, int right){
int middle = ((right - left) / 2) + left;
if(sinhVien[middle].getMssv() == mssv){
if(sinhVien[middle].getMssv() > mssv){
return binarySearch(sinhVien, mssv, left, middle - 1);
return binarySearch(sinhVien, mssv, middle + 1, right);
public void printSinhVien(){
int length = sinhVien.Length;
for(int i = 0; i < length; i++){
printInfoSinhVien(sinhVien[i]);
public void printInfoSinhVien(SinhVien sinhvien){
Console.WriteLine("-------------");
Console.WriteLine("Ten: "+sinhvien.getTen());
Console.WriteLine("MSSV: "+sinhvien.getMssv()+" - diem trung binh: "+sinhvien.getDiemTb());
Console.WriteLine("-------------");
public SinhVien(int mssv, String ten, int diemTb){
public void setMssv(int mssv){
public void setTen(String ten){
public void setDiemTb(int diemTb){