Tại sao mã sắp xếp lựa chọn này không hoạt động?

lập trình


#include<iostream>
using namespace std;


void PrintArray(int arr[], int size)
{
    for (int i = 0; i < size ; i++)
    {
        cout << arr[i] << " ";
    }
}
void selectionSort(int arr[],int n){
    for (int i = 0; i < n-1;i++){
        for (int j = i+1; i < n;j++){
            if(arr[i]>arr[j]){
                swap(arr[i], arr[j]);
            }
        }
    }
}
int main(){
    int arr[7] = {1,8,3,6,7,6,4};
    selectionSort(arr, 7);
    PrintArray(arr, 7);
    return 0;
}

Những gì tôi đã thử:

Tôi đã viết mã để sắp xếp lựa chọn nhưng nó không cung cấp kết quả đầu ra cần thiết.

Giải pháp 1

Biên dịch không có nghĩa là mã của bạn đúng! :cười:
Hãy nghĩ về quá trình phát triển như viết một email: biên dịch thành công có nghĩa là bạn đã viết email bằng ngôn ngữ phù hợp – ví dụ như tiếng Anh, thay vì tiếng Đức – không phải email đó có chứa thông điệp bạn muốn gửi hay không.

Vì vậy, bây giờ bạn bước vào giai đoạn phát triển thứ hai (trên thực tế là giai đoạn thứ tư hoặc thứ năm, nhưng bạn sẽ đến các giai đoạn sớm hơn sau): Kiểm tra và gỡ lỗi.

Bắt đầu bằng cách xem nó làm gì và nó khác với những gì bạn muốn như thế nào. Điều này rất quan trọng vì nó cung cấp cho bạn thông tin về lý do tại sao nó lại làm như vậy. Ví dụ: nếu một chương trình nhằm mục đích cho phép người dùng nhập một số và nhân đôi số đó và in ra câu trả lời, thì nếu đầu vào/đầu ra sẽ như thế này:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

Sau đó, khá rõ ràng rằng vấn đề nằm ở bit nhân đôi nó – nó không cộng chính nó với chính nó hoặc nhân nó với 2, nó nhân nó với chính nó và trả về bình phương của đầu vào.
Vì vậy, bạn có thể xem mã và rõ ràng là nó ở đâu đó ở đây:

C#
private int Double(int value)
   {
   return value * value;
   }

Khi bạn đã biết điều gì có thể xảy ra, hãy bắt đầu sử dụng trình gỡ lỗi để tìm hiểu lý do. Đặt điểm dừng trên dòng đầu tiên của phương thức và chạy ứng dụng của bạn. Khi đạt đến điểm ngắt, trình gỡ lỗi sẽ dừng và trao quyền kiểm soát cho bạn. Giờ đây, bạn có thể chạy mã theo từng dòng một (được gọi là “một bước”) và xem xét (hoặc thậm chí thay đổi) nội dung biến nếu cần (bạn thậm chí có thể thay đổi mã và thử lại nếu cần).
Hãy suy nghĩ xem mỗi dòng trong mã sẽ làm gì trước khi bạn thực thi nó và so sánh điều đó với những gì nó thực sự làm khi bạn sử dụng nút “Bước qua” để thực hiện lần lượt từng dòng. Nó có làm được điều bạn mong đợi không? Nếu vậy, hãy chuyển sang dòng tiếp theo.
Nếu không, tai sao không? Nó khác nhau như thế nào?
Hy vọng rằng điều đó sẽ giúp bạn xác định phần nào của mã đó có vấn đề và vấn đề là gì.

Tôi sẽ cho bạn một gợi ý: hãy nắm rõ các giá trị chỉ mục mảng của bạn … hãy nhớ rằng các chỉ mục chạy từ 0 đến (N – 1) cho một mảng gồm N phần tử. Vì vậy, một mảng gồm 3 phần tử sẽ chỉ có các chỉ mục hợp lệ là 0, 1 và 2.

Đây là một kỹ năng và là một kỹ năng rất đáng để phát triển vì nó giúp ích cho bạn trong thế giới thực cũng như trong quá trình phát triển. Và giống như tất cả các kỹ năng, nó chỉ được cải thiện khi sử dụng!

コメント

タイトルとURLをコピーしました