Chọn câu đúng nhất để mô tả thuật toán sắp xếp nổi bọt (Bubble Sort) trên mảng M có N phần tử:
A. Đi từ cuối mảng về đầu mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N–1 lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng
Đáp án chính xác
B. Đi từ đầu mảng về cuối mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng.
C. Đi từ cuối mảng về đầu mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng
Tìm mô tả đúng nhất cho hàm TinhTong sau: int TinhTong(int N) { int so = 2; int tong = 0; int dem = 0; while (dem <N) { if (KiemTra(so) == 1) { tong = tong + so; dem ++; } so = so + 1; } return tong; } Trong đó int KiemTra(int so) { for (int i = 2; i<so; i++) if (so%i == 0) return 0; return 1; }
Với cấu trúc dữ liệu của danh sách liên kết đơn lưu trữ thông tin về phòng máy: typedef struct PM { int maPM; int tongsoMay; } PHONGMAY; typedef struct Node { PHONGMAY Data; Node * NextNode; } OneNode; typedef OneNode * SLLPointer; Để quản lý danh sách liên kết đơn bằng phần tử đầu và phần tử cuối, cần định nghĩa kiểu dữ liệu:
Với định nghĩa cấu trúc dữ liệu cho danh sách liên kết đơn: typedef struct Node { int Data; Node * Link; } OneNode; typedef OneNode * SLLPointer; Hàm dưới đây để thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có địa chỉ InsNode. SLLPointer ThemGiua(SLLPointer &SList, int NewData, SLLPointer &InsNode) { SLLPointer NewNode = new OneNode; if (NewNode != NULL) NewNode ->NextNode = NULL; NewNode ->Data = NewData; else return (NULL); if (InsNode->Link == NULL) { InsNode-> Link = NewNode; return (SList); } ……………………………………………………………. ……………………………………………………………. return (SList); } Hãy lựa chọn câu đúng nhất:
Định nghĩa cấu trúc dữ liệu của danh sách liên kết đơn được mô tả như sau: typedef struct Node { int Key; Node * NextNode; } OneNode; Trong đó, khai báo Node * NextNode; dùng để mô tả:
Thuật toán sắp xếp chèn trực tiếp (Straight Insertion Sort) được mô tả bằng đoạn mã giả như sau: B1: K = 1 B2: IF (K = N) Thực hiện BKT B3: X = M[K+1] B4: Pos = 1 B5: IF (Pos > K) Thực hiện B7 B6: ELSE // Tìm vị trí chèn B6.1: If (X <= M[Pos]) Thực hiện B7 B6.2: Pos++ B6.3: Lặp lại B6.1 B7: I = K+1 B8: IF (I > Pos) B8.1: M[I] = M[I-1] B8.2: I-- B8.3: Lặp lại B8 B9: ELSE B9.1: M[Pos] = X B9.2: K++ B9.3: Lặp lại B2 BKT: Kết thúc Trong đó B8 mô tả trường hợp
Tổ chức cấu trúc dữ liệu cho danh sách liên kết đơn: typedef struct Node { int Data; Node * Link; } OneNode; typedef OneNode * SLLPointer; Mã giả thuật toán thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có địa chỉ InsNode: B1: NewNode = new OneNode B2: IF (NewNode = NULL) Thực hiện BKT B3: NewNode ->Link = NULL B4: NewNode ->Data = NewData B5: IF (InsNode-> Link = NULL) B5.1: InsNode-> Link = NewNode B5.2: Thực hiện BKT // Nối các nút kế sau InsNode vào sau NewNode B6: ……………………………………………….. // Chuyển mối liên kết giữa InsNode với nút kế của nó về NewNode B7: ……………………………………………….. BKT: Kết thúc B6 và B7 dùng để nối nút kế sau InsNode vào sau NewNode và chuyển mối liên kết giữa InsNode với nút kế nó về NewNode. Hãy chọn câu đúng nhất cho B6 và B7
Đoạn mã giả dưới đây mô tả thuật toán gì? Thuật toán: B1: k = 1 B2: IF M[k] == X AND k != N B2.1: k++ B2.2: Lặp lại B2 B3: IF k < N Thông báo tìm thấy tại vị trí k B4: ELSE Không tìm thấy. B5: Kết thúc
Cho hàm tìm kiếm tuyến tính như sau: int TimKiem (int M[], int N, int X) { int k = 0; M[N] = X; while (M[k] != X) k++; if (k < N) return (k); return (-1); } Chọn câu đúng nhất:
Đối với thuật toán sắp xếp chọn trực tiếp cho dãy các phần tử sau (10 pt) 16 60 2 25 15 45 5 30 33 20 Cần thực hiện ..................... chọn lựa phần tử nhỏ nhất để sắp xếp mảng M có thứ tự tăng dần.
Xét thủ tục sau: int TimKiemNP (int M[], int First, int Last, int X) { if (First > Last) return (-1); int Mid = (First + Last)/2; if (X == M[Mid]) return (Mid); if (X < M[Mid]) return(TimKiemNP (M, First, Mid – 1, X)); else return(TimKiemNP (M, Mid + 1, Last, X)); } Lựa chọn câu đúng nhất để mô tả thủ tục trên: