Próbowałem zastosować algorytm bańki sortowania do tablicy wartości.

Mam 5000 wartości w moim wejściu, od 1 do 5000. Importowałem wartości z pliku tekstowego, aby utworzyć tablicę, która działała dobrze. Algorytm bańki również działał dobrze.

Problem jest gdzieś z wyjściem. W ogóle niektóre wartości nie pojawiają się w wyjściu, podczas gdy niektóre wartości są drukowane wiele razy. Dołączam mój kod i obraz wyjścia w celach informacyjnych.

#include<stdio.h>
#include<conio.h>
int main() {
    FILE * fp;
    long int i, j, n, temp;

    printf("Enter array size:");
    scanf("%ld",&n);

    long int array[n];

    fp = fopen("5000averagecase.txt", "r");

    for (i=0; i < n; ++i)
        fscanf(fp,"%ld",&array[i]);

    for (i=0; i < n; ++i)
        for (j=0; j < n-1-i; ++j)
            if (array[j] > array[j+1]) {
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
                temp = 0;
            }

    for (i=0;  i< n; ++i)
        printf("%ld\t", array[i]);

    return(0);
}

https://i.stack.imgur.com/zbxvu.png.

-1
Chaitanya Bathia 25 lipiec 2020, 19:38

1 odpowiedź

Najlepsza odpowiedź

Ponieważ twój plik ma tylko wartości z 1 do 5000 i zakładam, że nie są w żaden sposób posortowane, dlaczego nie tylko zrobisz innego pliku

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// shuffles an array given a pointer to the array and its length
void shuffleArray(int *array, int len) {
  srand(time(NULL));
  int n1, n2, tmp;
  for(int i = 1;i < len - 1; i++) {
    // get random two positions in the array to swap
    n1 = rand() % len, n2 = rand() % len;
    // just swap'em
    tmp = array[n1];
    array[n1] = array[n2];
    array[n2] = tmp;
  }
}

int main() {
  FILE * fp = fopen("5000averagecase.txt", "w");
  // check for file pointer validity
  if(fp == NULL) {
    printf("Error: can't open the file!");
    exit(0);
  }
  // creating an array of 5000 number
  int arr[5000];
  // fill it from 1 to 5000
  for(int i = 0;i < 5000; i++) {
    arr[i] = i + 1;
  }
  // shuffle it
  shuffleArray(arr, 5000);
  // write the array in `5000averagecase.txt` for later use
  for(int i = 0;i < 5000; i++) {
    fprintf(fp, "%d ", arr[i]);
  }
  // don't forget to close the file at the end
  fclose(fp);
  return 0;
}

Teraz po wykonaniu tego otrzymujesz poprawny plik, a po wykonaniu kodu sortowania, zobaczysz, że działa zgodnie z oczekiwaniami

0
SaymoinSam 25 lipiec 2020, 17:13