Sortowanie przez wybieranie

0

Witam. Mam zadanie - sortowanie przez wybieranie. Działa mi wszystko ok, gdy wpisuje liczby użytkownik. Chciałabym poprosić o pomoc w stworzeniu pliku z różnymi liczbami (i wtedy program powinien wczytywać z pliku liczby, nie zaś muszą być one wprowadzane przez użytkownika)..

#include <stdio.h>
int *selectionSort(int array[],int n) {
    int j,temp,i;
    for (i = 0; i < n; i++) {
        for(j = i+1; j < n; j++) {
            if(array[i] > array[j])
            {
                temp = array[i];
                array[i]   = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}
int main() {
    int array[1000],n,i;
    printf("Enter the number of element you want to Sort: \n");
    scanf("%d",&n);
    for(i = 0; i < n; i++) {
	    printf("\nEnter %d element in the list : ", i+1);
        scanf("%d",&array[i]);
    }
    int *sortArray = selectionSort(array,n);
          printf("\nSorted list: \n");
    for(i = 0; i < n; i++ ) {
        printf("%d\n",sortArray[i]);
    }
}
0

Chyba raczej chodzi Ci o wczytywanie liczb z pliku?
Możesz w pliku zapisać liczby oddzielone np znakiem nowej linii.
wtedy wczytujesz liczby funkcją getline() i zapisujesz je do tablicy array.
Tu poczytasz o obsłudze plików: http://cpp0x.pl/kursy/Kurs-C++/Obsluga-plikow/305

1

Można skierować zawartość pliku na wejście

>type input.txt
5 4 11 2 22 1

>g++ s.cpp && a.exe < input.txt
Enter the number of element you want to Sort:

Enter 1 element in the list :
Enter 2 element in the list :
Enter 3 element in the list :
Enter 4 element in the list :
Enter 5 element in the list :
Sorted list:
1
2
4
11
22

>type input.txt | a.exe
Enter the number of element you want to Sort:

Enter 1 element in the list :
Enter 2 element in the list :
Enter 3 element in the list :
Enter 4 element in the list :
Enter 5 element in the list :
Sorted list:
1
2
4
11
22
0

A jak można zmienić dany fragment, aby program też obliczał liczbę operacji, przeprowadzonych podczas sortowania (swap number)?

int *selectionSort(int array[],int n) {
    int j,temp,i;
    for (i = 0; i < n; i++) {
        for(j = i+1; j < n; j++) {
            if(array[i] > array[j])
            {
                temp = array[i];
                array[i]   = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}
1
Beata Griškevič napisał(a):

A jak można zmienić dany fragment, aby program też obliczał liczbę operacji, przeprowadzonych podczas sortowania (swap number)?

int *selectionSort(int array[],int n) {
    int j,temp,i;
    for (i = 0; i < n; i++) {
        for(j = i+1; j < n; j++) {
            if(array[i] > array[j])
            {
                temp = array[i];
                array[i]   = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}

Potrzebna jest dodatkowa zmienna typu Int, zainicjowana wartością 0, a przy każdej zamianie liczb miejscami zwiększasz o 1, a na końcu wyświetlacz wartość tej zmiennej.

0

Napisałam to jakoś tak (obliczenie liczby porównań - swaps), ale mi nie działa. Chyba jest jakiś błąd. Czy ktoś mógłby to sprawdzić i poprawić?

#include <stdio.h>
int *selectionSort(int array[],int n, int swaps) {
    int j,temp,i;
    for (i = 0; i < n; i++) {
        for(j = i+1; j < n; j++) {
            if(array[i] > array[j])
            {
                temp = array[i];
                array[i]   = array[j];
                array[j] = temp;
                swaps++;
            }
        }
    }
    return array;
}
int main() {
    int array[1000],n,i, swaps = 0;
    printf("Enter the number of element you want to Sort: \n");
    scanf("%d",&n);
    for(i = 0; i < n; i++) {
        printf("\nEnter %d element in the list : ", i+1);
        scanf("%d",&array[i]);
    }
    int *sortArray = selectionSort(array,n);
          printf("Number of swaps: %d\n, swaps);
          printf("\nSorted list: \n");
    for(i = 0; i < n; i++ ) {
        printf("%d\n",sortArray[i]);
    }
}
0

Lista błędów:

int *selectionSort(int array[],int n, int swaps) 

int *sortArray = selectionSort(array,n);

 printf("Number of swaps: %d\n, swaps);
0

Nie chyba, tylko na pewno, choćby błąd kompilacji. W tym przypadku powinnaś wkleić ten błąd do posta.

  1. selectionSort(array,n) - ta funkcja przyjmuje 3 parametry, a przekazujesz 2

  2. printf("Number of swaps: %d\n, swaps) - brakuje zamykającego cudzysłowu

  3. int *selectionSort(int array[],int n, int swaps) - przekazujesz swaps przez wartość, więc nie zadziała. Polecam lekturę: Przekazywanie parametru przez wartość i referencję (w C nie ma referencji, więc należy ignorować te fragmenty o referencji).

1 użytkowników online, w tym zalogowanych: 0, gości: 1