30/09/2018, 23:31

Anh chị tìm giúp lỗi trong code miêu tả thuật toán tìm kiếm Selection Sort?

Em viết như thế mà chạy không được, Không hiểu ra lỗi sai của mình mong anh chị diễn đàn giúp đỡ với ạ :((
http://codepad.org/NIknBL7B

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 100


void khoitaomang (int a[], int n)
{
    srand(time(NULL));
    n=5;
    for (int i=0; i<n; i++)
    {
        a[i]= rand()%100;
    }
}
void xuatmang (int a[], int n)
{
    for (int i=0; i<n; i++)
    {
        cout <<a[i]<<"	";
    }
}
void selectionsort(int a[],int n)
{
    int vtmin,temp;
    for (int i=0; i<n-1; i++)
    {
        vtmin=i;
        for (int j=i+1; j<n; j++)
        {
            if (a[vtmin]>a[j]) j=vtmin;
        }

        if (vtmin!=i)
        {
            temp=a[vtmin];
            a[vtmin]=a[j];
            temp=a[j];
        }
    }

}

int main ()
{
    int a[MAX],n=5;
    khoitaomang(a,n);
    xuatmang (a,n);
    selectionsort(a,n);
    xuatmang (a,n);
    getch ();
}
Nguyen Ca viết 01:40 ngày 01/10/2018

Hoán vị sai, gán biến bị sai, làm theo giống như dưới

void SelectionSort(int a[],int N )
{     int   min; // chỉ số phần tử nhỏ nhất trong dãy hiện hành  

      for (int  i=0; i<N-1 ; i++)

      {
            min = i;

            for(int j = i+1; j <N ; j++)

                  if (a[j ] < a[min])

                         min = j; // ghi nhận vị trí phần tử hiện nhỏ nhất  

            Hoanvi(a[min], a[i]);
      }
 }

Nguyen Kien viết 01:37 ngày 01/10/2018

j=vtmin

Phép gán chỗ này là không hợp lý nha bởi vì theo tư tưởng của thuật toán thì mình sẽ tìm vị trí min nên khi tìm được phải cập nhật cho biến min chứ không phải là j.
Sửa lại: vtmin = j; là OK

Lương Thế Hải viết 01:47 ngày 01/10/2018

Đoạn code hoán vị của bạn sai ở cái cuối cùng
Sửa

a[j] = temp
Bài liên quan
0