K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

20 tháng 9 2023

Bước 1. Số lớn nhất trong dãy số (70) cần được chuyển về vị trí thứ nhất trong dãy, do đó đổi chỗ 70 với 11. Sau bước này, vì 94 đã ở đúng vị trí mong muốn nên tiếp theo chỉ cần quan tâm đến dãy số còn lại: 11,18, 39, 63, 52, 41, 5.

Bước 2. Số lớn nhất trong dãy số còn lại (63) cần được chuyển về đầu dãy này, do đó đổi chỗ 63 với 11. Sau bước này có thêm số 63 đã ở đúng vị trí mong muốn, dãy số còn lại chưa được sắp xếp là 18, 39, 11, 52, 41, 5.

Tiếp tục lặp lại việc “Chọn lấy số lớn nhất trong dãy số còn lại và đổi chỗ nó với số đứng đầu dãy này” cho đến khi hết dãy ban đầu.

Dãy (a)

a1

a2

a3

a4

a5

a6

a7

a8

Giải thích

Ban đầu

11

70

18

39

63

52

41

5

Tiếp theo đổi chỗ 70 và a1

Sau bước 1

70

11

18

39

63

52

41

5

Tiếp theo đổi chỗ 63 và a2

Sau bước 2

70

63

18

39

11

52

41

5

Tiếp theo đổi chỗ 52 và a3

Sau bước 3

70

63

52

39

11

18

41

5

Tiếp theo đổi chỗ 41 và a4

Sau bước 4

70

63

52

41

11

18

39

5

Tiếp theo đổi chỗ 39 và a5

Sau bước 5

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Sau bước 6

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Sau bước 7

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Dãy kết quả

70

63

52

41

39

18

11

5

 

QT
Quoc Tran Anh Le
Giáo viên
20 tháng 9 2023

Bước 1. Số lớn nhất trong dãy số (70) cần được chuyển về vị trí thứ nhất trong dãy, do đó đổi chỗ 70 với 11. Sau bước này, vì 94 đã ở đúng vị trí mong muốn nên tiếp theo chỉ cần quan tâm đến dãy số còn lại: 11,18, 39, 63, 52, 41, 5.

Bước 2. Số lớn nhất trong dãy số còn lại (63) cần được chuyển về đầu dãy này, do đó đổi chỗ 63 với 11. Sau bước này có thêm số 63 đã ở đúng vị trí mong muốn, dãy số còn lại chưa được sắp xếp là 18, 39, 11, 52, 41, 5.

Tiếp tục lặp lại việc “Chọn lấy số lớn nhất trong dãy số còn lại và đổi chỗ nó với số đứng đầu dãy này” cho đến khi hết dãy ban đầu.

Dãy (a)

a1

a2

a3

a4

a5

a6

a7

a8

Giải thích

Ban đầu

11

70

18

39

63

52

41

5

Tiếp theo đổi chỗ 70 và a1

Sau bước 1

70

11

18

39

63

52

41

5

Tiếp theo đổi chỗ 63 và a2

Sau bước 2

70

63

18

39

11

52

41

5

Tiếp theo đổi chỗ 52 và a3

Sau bước 3

70

63

52

39

11

18

41

5

Tiếp theo đổi chỗ 41 và a4

Sau bước 4

70

63

52

41

11

18

39

5

Tiếp theo đổi chỗ 39 và a5

Sau bước 5

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Sau bước 6

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Sau bước 7

70

63

52

41

39

18

11

5

Tiếp theo không đổi chỗ

Dãy kết quả

70

63

52

41

39

18

11

5

 

QT
Quoc Tran Anh Le
Giáo viên
9 tháng 11 2023

18 tháng 7 2023

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)

#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;

}

QT
Quoc Tran Anh Le
Giáo viên
23 tháng 8 2023

- Bước 1: i = 0;
- Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[n-1].
- Bước 3: Đổi chỗ a[min] và a[i].
- Bước 4: Nếu i < n-1 thì gán i = i+1; rồi lặp lại bước 2, ngược lại -> Dừng.

QT
Quoc Tran Anh Le
Giáo viên
23 tháng 8 2023

*Thuật toán sắp xếp chèn (Insertion Sort):

import time

def insertion_sort(arr):

 n = len(arr)

 for i in range(1, n):

  key = arr[i]

  j = i - 1

  while j >= 0 and arr[j] > key:

   arr[j + 1] = arr[j]

   j -= 1

  arr[j + 1] = key

# Dãy số nguyên đầu vào

A = [3, 1, 0, 10, 13, 16, 9, 7, 5, 1]

# In dãy số nguyên trước khi sắp xếp

print("Dãy số nguyên trước khi sắp xếp:", A)

# Bắt đầu đo thời gian thực hiện thuật toán

start_time = time.time()

# Gọi hàm sắp xếp chèn

insertion_sort(A)

# Kết thúc đo thời gian thực hiện thuật toán

end_time = time.time()

# In dãy số nguyên sau khi sắp xếp

print("Dãy số nguyên sau khi sắp xếp:", A)

# In thời gian thực hiện thuật toán

print("Thời gian thực hiện thuật toán: {:.6f} giây".format(end_time - start_time))

Thời gian thực hiện là 0 giây

*Thuật toán sắp xếp chọn:

import time

def selection_sort(arr):

 n = len(arr)

 for i in range(n):

  min_idx = i

  for j in range(i + 1, n):

   if arr[j] < arr[min_idx]:

    min_idx = j

  arr[i], arr[min_idx] = arr[min_idx], arr[i]

# Dãy số nguyên đầu vào

A = [3, 1, 0, 10, 13, 16, 9, 7, 5, 1]

# In dãy số nguyên trước khi sắp xếp

print("Dãy số nguyên trước khi sắp xếp:", A)

# Bắt đầu đo thời gian thực hiện thuật toán

start_time = time.time()

# Gọi hàm sắp xếp chọn

selection_sort(A)

# Kết thúc đo thời gian thực hiện thuật toán

end_time = time.time()

# In dãy số nguyên sau khi sắp xếp

print("Dãy số nguyên sau khi sắp xếp:", A)

# In thời gian thực hiện thuật toán

print("Thời gian thực hiện thuật toán: {:.6f} giây".format(end_time - start_time))

Thời gian thực hiện là: 0 giây

*Thuật toán sắp xếp nổi bọt:

import time

def bubble_sort(arr):

 n = len(arr)

 for i in range(n - 1):

  for j in range(n - i - 1):

   if arr[j] > arr[j + 1]:

    arr[j], arr[j + 1] = arr[j + 1], arr[j]

# Dãy số nguyên đầu vào

A = [3, 1, 0, 10, 13, 16, 9, 7, 5, 1]

# In dãy số nguyên trước khi sắp xếp

print("Dãy số nguyên trước khi sắp xếp:", A)

# Bắt đầu đo thời gian thực hiện thuật toán

start_time = time.time()

# Gọi hàm sắp xếp nổi bọt

bubble_sort(A)

# Kết thúc đo thời gian thực hiện thuật toán

end_time = time.time()

# In dãy số nguyên sau khi sắp xếp

print("Dãy số nguyên sau khi sắp xếp:", A)

# In thời gian thực hiện thuật toán

print("Thời gian thực hiện thuật toán: {:.6f} giây".format(end_time - start_time))

Thời gian thực hiện là: 0 giây

22 tháng 8 2023

Diễn biến từng bước sắp xếp nhanh một dãy số cụ thể dùng phân đoạn Lomuto sẽ khác với dùng phân đoạn Hoare. Sự khác biệt giữa phương pháp phân đoạn Lomuto và phân đoạn Hoare trong thuật toán QuickSort là ở việc chọn pivot, cách phân đoạn và cách sắp xếp các phần tử.

Cụ thể, phương pháp phân đoạn Lomuto sẽ chọn pivot là phần tử cuối cùng của mảng, phân đoạn theo pivot và sau đó đưa pivot về giữa hai phân đoạn, tiếp tục thực hiện thuật toán QuickSort trên hai phân đoạn trái và phải của pivot. Trong khi đó, phương pháp phân đoạn Hoare sẽ chọn pivot là phần tử ở giữa mảng, đưa hai con trỏ từ đầu và cuối mảng trỏ tới nhau và dịch chuyển chúng sao cho phần tử bên trái pivot lớn hơn pivot, phần tử bên phải pivot nhỏ hơn pivot, sau đó đưa pivot về vị trí mới và thực hiện QuickSort trên hai phân đoạn trái và phải của pivot.

D
datcoder
CTVVIP
22 tháng 10 2023

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.

19 tháng 12 2021

#include <bits/stdc++.h>

using namespace std;

long long a[10000],n,i;

int main()

{

cin>>n;

for (i=1; i<=n; i++)

cin>>a[i];

sort(a+1,a+n+1);

for (i=n; i>=1; i--) cout<<a[i]<<" ";

return 0;

}