Viết chương trình nhập vào mảng các số nguyên và sử dụng lần lượt các thuật toán tìm kiếm Tuần tự vét cạn (LinearExhaustive),thuật toán tìm kiếm tuần tự lính canh (LinearSentinel) và thuật toán tìm kiếm nhị phân (BinarySearch)

Tải Code về máy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include<stdio.h>
#include<conio.h>
#define MAX 100

// Hàm nhập mảng các số nguyên .
void NhapMang(int a[],int &n)
{
 quaylai:printf("\nNhap vao so luong phan tu cua mang:n=");
 scanf("%d",&n);
 if(n<1||n>MAX)
 {
  printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
  goto quaylai;
 }
 for(int i=0;i<n;i++)
 {
  printf("\nNhap vao a[%d]=",i);
  scanf("%d",&a[i]);
 }
}

// Hàm xuất mảng các số nguyên .
void XuatMang(int a[],int n)
{
 for(int i=0;i<n;i++)
 {
  printf("%4d",a[i]);
 }
 printf("\n");
}

// Hàm nhập giá trị cần tìm kiếm .
void NhapGiaTrixCanTim(int &x)
{
 printf("\nNhap vao x=");
 scanf("%d",&x);
}

// Thuật toán LinearExhaustive
int TimKiemTuanTuVetCan(int a[],int n,int x)
{ 
 for(int i=0; i<n; i++)
 { 
  if(a[i] == x)
  { return i; 
  }
 } 
 return -1; 
}

// Thuật toán LinearSentinel
int TimKiemTuanTuLinhCanh(int a[],int n,int x)
{
 a[n]=x;
 for(int i=0;;i++)
 {
  if(a[i]==x)
   return i;
 }
}

// Hàm hoán vị .
void HoanVi(int &x,int &y)
{
 int temp=x;
 x=y;
 y=temp;
}

// Hàm sắp xếp mảng tăng dần (hỗ trợ cho thuật toán BinarySearch) .
void SapXepTangDan(int a[],int n)
{
 int i,j;
 for(i=0;i<n-1;i++)
 {
  for(j=i+1;j<n;j++)
  {
   if(a[i]>a[j])
   {
    HoanVi(a[i],a[j]);
   }
  }
 }
}

// Thuật toán BinarySearch
int TimKiemNhiPhan(int a[], int n, int x)
{ 
 int l = 0, r = n-1; 
 while (l <= r)
 { 
  int m = (l + r)/2; 
  if (a[m] == x)
  { 
   return m; 
  } 
  else
  { 
   if (x < a[m])
   { 
    r=m-1;
   } 
   else
   { 
    l = m + 1; 
   } 
  } 
 } 
 return -1; 
}

// Hàm MeNu .
void MeNu()
{
 int a[MAX],n,x,m,i,w;
 printf("\n");
 printf("\n---------------------MeNu-----------------------\n");
 do{
  // Bảng MeNu đưa ra các sự lựa chọn .
  printf("\n");
  printf("\n");
  printf("\n Moi ban lua chon cac yeu cau !");
  printf("\n");
  printf("\nNhap so ban chon roi nhan Enter de xac nhan!");
  printf("\n");
  printf("\n 1 - Tim Kiem Phan Tu Bang Thuat Toan LinearExhaustive ");
  printf("\n");
  printf("\n 2 - Tim Kiem Phan Tu Bang Thuat Toan LinearSentinel ");
  printf("\n");
  printf("\n 3 - Tim Kiem Phan Tu Bang Thuat Toan BinarySearch ");
  printf("\n");
  printf("\n 0 - Thoat Chuong Trinh ");
  printf("\n");
  printf("\n------------------------------------------------\n");
  printf("\n");
  printf("\n Moi ban nhap vao lua chon cua ban o day:");
  scanf("%d",&w);
  // Cấu trúc switch-case .
  switch(w)
  {
  case 1:
   {
    printf("\n>>>>>>Chao Mung Ban Den Voi Thuat Toan LinearExhaustive<<<<<<<\n");
    printf("\n");
    printf("\n");
    NhapMang(a,n);
    printf("\n>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<\n");
    XuatMang(a,n);
    NhapGiaTrixCanTim(x);
    i=TimKiemTuanTuVetCan(a,n,x);
    if(i==-1)
    {
     printf("\nKhong tim thay x trong mang a");
    }
    else
    {
     printf("\nVi Tri cua x trong mang a la:%d",i+1);
    }
    break;
   }
  case 2:
   {
    printf("\n>>>>>>Chao Mung Ban Den Voi Thuat Toan LinearSentinel<<<<<<<\n");
    printf("\n");
    printf("\n");
    NhapMang(a,n);
    printf("\n>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<\n");
    XuatMang(a,n);
    NhapGiaTrixCanTim(x);
    i=TimKiemTuanTuLinhCanh(a,n,x);
    if(i==-1)
    {
     printf("\nKhong tim thay x trong mang a");
    }
    else
    {
     printf("\nVi Tri cua x trong mang a la:%d",i+1);
    }
    break;
   }
  case 3:
   {
    printf("\n>>>>>>Chao Mung Ban Den Voi Thuat Toan BinarySearch<<<<<<<\n");
    printf("\n");
    printf("\n");
    NhapMang(a,n);
    printf("\n>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<\n");
    XuatMang(a,n);
    SapXepTangDan(a,n);
    printf("\n>>>>>>Mang Sau Khi Da Sap Xep Tang Dan La:<<<<<<\n");
    XuatMang(a,n);
    NhapGiaTrixCanTim(x);
    m=TimKiemNhiPhan(a,n,x);
    if(m==-1)
    {
     printf("\nKhong tim thay x trong mang a");
    }
    else
    {
     printf("\nVi Tri cua x trong mang a la:%d",m+1);
    }
    break;
   }
  }
   if(w==0)
   {
    printf("\nThanks You For Using The Program ! Goodbye And See You Later !\n"); 
    getch(); 
   }
 }while(w!=0);
}

// Hàm chính .
void main()
{
 MeNu();
}

Nhận xét

Bài đăng phổ biến từ blog này

Bài 17 : Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số

Bài Tập Cây Nhị Phân Tìm Kiếm

Bài 22 : Viết chương trình nhập vào số nguyên dương n gồm 5 chữ số,kiểm tra xem các chữ số n có phải là số đối xứng hay không ?