Cho dãy A gồm các số sau: 4 7 9 1 6 3
Dựa vào thuật toán sắp xếp bằng tráo đổi để được 1 dãy tăng, hãy cho biết sau lần duyệt thứ mấy ta thu được dãy A tăng: 1 3 4 6 7 9
A.3
b.4
c.6
d.5
Cho dãy A gồm các số sau: 4 7 9 1 6 3
Dựa vào thuật toán sắp xếp bằng tráo đổi để được 1 dãy tăng, hãy cho biết dãy thu được sau lần duyệt 1 và duyệt 2?
Cho Dãy A gồmN=8.Dãy A gồm các số nguyênlà : 9 ,11, 3, 25, 1, 18,20, 2.Hãy sử dụng thuật toán sắp xếp tráo đổi( sắp xếp dãy A thành dãy không tăng)
Cách làm: Làm theo thứ tự các bước:
1.Xác định bài toán
2.Ý tưởng
3.Thuật toán( làm 1 trong 2 cách:Liệt kê và sơ đồ khối)
4.Ápdụng làm dãy số trên theo các lần duyệt như trong sách giáo khoa
#include <bits/stdc++.h>
using namespace std;
long long a[8],n,i,j;
int main()
{
n=8;
for (i=1; i<=n; i++) cin>>a[i];
for (i=1; i<=n-1; i++)
for (j=i+1; j<=n; j++)
if (a[i]<a[j]) swap(a[i],a[j]);
for (i=1; i<=n; i++) cout<<a[i]<<" ";
return 0;
}
Cho dạy B gồm 10 số nguyên tử a1 đến a10 gồm các số hạng 4, 71, 3, 40, 50, 9, 8, 7,1. Hãy sử dụng thuật toán sắp xếp bảng cách tráo đổi để sắp xếp dãy B thành dãy giảm
#include <bits/stdc++.h>
using namespace std;
long long b[10],i,j,n;
int main()
{
n=10;
for (i=1; i<=n; i++)
cin>>b[i];
for (i=1; i<=n-1; i++)
for (j=i+1;j<=n;j++)
if (b[i]<=b[j]) swap(b[i],b[j]);
for (i=1; i<=n; i++)
cout<<b[i]<<" ";
return 0;
}
Mọi người giúp em với được không ạ!
ĐỀ 1: CHẠY THUẬT TOÁN MÔ PHỎNG SẮP XẾP DÃY SỐ THEO DỮ KIỆN SAU:
Input: N = 8; A = [ 8 9 3 6 5 2 7 4 ]
Output: A = [ 2 3 4 5 6 7 8 9 ]
Duyệt 1:
#include <bits/stdc++.h>
using namespace std;
long long a[1000],n,i,tam,j;
int main()
{
cin>>n;
for (i=1; i<=n; i++)
cin>>a[i];
for (i=1; i<=n-1; i++)
for (j=i+1; j<=n; j++)
if (a[i]>a[j]) swap(a[i],a[j]);
for (i=1; i<=n; i++)
cout<<a[i]<<" ";
return 0;
}
cho dãy số 3; 1; 7; 9; 5
cho phép 3 lần đổi chỗ, mỗi lần được đổi chỗ 2 số bất kì. em hãy sắp xếp lại dãy số trên theo thứ tự tăng dần.
đổi vị trí số 3 và số 1 được 1;3;7;9;5
đổi tiếp vị trí số 5 va số 7 được 1;3;5;9;7
đổi tiêp vị trí số 7 và số 9 được 1;3;5;7;9
Khi đó ta có dãy số được sắp xếp theo thứ tự tăng dần
Mô phỏng thuật toán sắp xếp dãy số không giảm với N = 10 và dãy A : 6,1,5,3,7,8,10,7,12,4 . Hãy cho biết với lần duyệt thứ mấy để sắp xếp thành 1,3,4,5,6,7,7,8,10,12
#include <bits/stdc++.h>
using namespace std;
long long a[1000],i,n;
int main()
{
cin>>n;
for (i=1; i<=n; i++) cin>>a[i];
sort(a+1,a+n+1);
for (i=1; i<=n; i++) cout<<a[i]<<" ";
return 0;
}
Với thuật toán sắp xếp bằng tráo đổi (Exchange sort). Muốn sắp xếp dãy theo thứ tự không tăng thì cần đổi dấu bước nào sau đây?
A. i>M
B. M<2
C. ai>ai+1
D. i>N
Cho dãy A= [5, 8, 1, 0, 10, 4, 3]. Viết các chương trình sắp xếp dãy A theo thứ tự tăng dần theo các thuật toán sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt.
THAM KHẢO!
1.Thuật toán sắp xếp chèn (Insertion Sort):
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
A = [5, 8, 1, 0, 10, 4, 3]
sorted_A = insertion_sort(A)
print("Dãy A sau khi sắp xếp chèn:", sorted_A)
2. Thuật toán sắp xếp chọn (Selection Sort):
def selection_sort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
A = [5, 8, 1, 0, 10, 4, 3]
sorted_A = selection_sort(A)
print("Dãy A sau khi sắp xếp chọn:", sorted_A)
3.Thuật toán sắp xếp nổi bọt (Bubble Sort):
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
A = [5, 8, 1, 0, 10, 4, 3]
sorted_A = bubble_sort(A)
print("Dãy A sau khi sắp xếp nổi bọt:", sorted_A)
Cho dãy các số A = [3, 1, 0, 10, 13, 16, 9, 7, 5, 11].
a) Viết chương trình mô tả thuật toán tìm kiếm phần tử C = 9 của dãy trên. Tính thời gian chính xác thực hiện công việc tìm kiếm này.
b) Giả sử dây A ở trên đã được sắp xếp theo thứ tự tăng dần: A= [0,1,3,5,7,9,10,11,13, 16]. Viết chương trình tìm kiếm nhị phân để tìm kiếm phân tử C = 9, đo thời gian thực hiện thuật toán. So sánh với kết quả 1ìm kiếm ở câu a.
a)
import time
def linear_search(arr, x):
"""
Tìm kiếm tuyến tính trong dãy arr để tìm giá trị x.
Trả về vị trí của x trong dãy nếu x được tìm thấy, -1 nếu không tìm thấy.
"""
n = len(arr)
for i in range(n):
if arr[i] == x:
return i
return -1
# Dãy số A
A = [3, 1, 0, 10, 13, 16, 9, 7, 5, 11]
# Phần tử cần tìm kiếm
C = 9
# Bắt đầu đo thời gian
start_time = time.perf_counter()
# Tìm kiếm phần tử C trong dãy A
result = linear_search(A, C)
# Kết thúc đo thời gian
end_time = time.perf_counter()
if result != -1:
print(f"Phần tử {C} được tìm thấy tại vị trí {result} trong dãy A.")
else:
print(f"Phần tử {C} không có trong dãy A.")
print(f"Thời gian thực hiện thuật toán: {end_time - start_time} giây.")
b)
import time
def binary_search(arr, x):
"""
Tìm kiếm nhị phân trong dãy arr để tìm giá trị x.
Trả về vị trí của x trong dãy nếu x được tìm thấy, -1 nếu không tìm thấy.
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == x:
return mid
elif arr[mid] < x:
left = mid + 1
else:
right = mid - 1
return -1
# Dãy số A đã được sắp xếp
A = [0, 1, 3, 5, 7, 9, 10, 11, 13, 16]
# Phần tử cần tìm kiếm
C = 9
# Bắt đầu đo thời gian
start_time = time.perf_counter()
# Tìm kiếm phần tử C trong dãy A bằng thuật toán tìm kiếm nhị phân
result = binary_search(A, C)
# Kết thúc đo thời gian
end_time = time.perf_counter()
if result != -1:
print(f"Phần tử {C} được tìm thấy tại vị trí {result} trong dãy A.")
else:
print(f"Phần tử {C} không có trong dãy A.")
print(f"Thời gian thực hiện thuật toán: {end_time - start_time} giây.")
-Thời gian thực hiện ở câu a là 8.99999,thời gian thực hiện ở câu b là 6,49999 giây.