Funkcja sortująca tablice na wskaźnikach

0

Cześć wszystkim! Mam problem z funkcją sortującą w C. Musi wykorzystywać wskaźniki. Kompilator pokazuje mi Zgłoszono nieobsługiwany wyjątek: naruszenie dostępu do odczytu. pt było 0x34D43162 :(

void sortuj(int *pt, int N) {

	int i, liczba_min, indeks_min, temp, poczatek = 0;
	do {
		liczba_min = *(pt);
		for (i = *(pt + 1); i <= N - 1; i++) {
			if (*(pt + i) < liczba_min) {
				indeks_min = i;
				liczba_min = *(pt + i);
			}
		}
		temp = *(pt + indeks_min);
		*(pt + indeks_min) = *(pt + poczatek);
		*(pt + poczatek) = temp;
		poczatek++;
	} while (poczatek < N);
} 

Tak wygląda main:

int main() {
	int tablica[n] = { 0 };

srand(time(NULL));
 	for (int i = 0; i < n; i++) {
		tablica[i] = rand();
	}

sortuj(tablica, n);
	for (int i = 0; i < n; i++) {
		printf("tablica[%.1d] = %.1d\n", i, tablica[i]);
	}
1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 5

void sortuj(int *a, int N);
int main()
{
    int *tablica = malloc(sizeof *tablica*(n+1));

srand(time(NULL));
    for (int i = 0; i < n; i++) {
        *(tablica+i) = rand();
    }

sortuj(tablica, n);
    for (int i = 0; i < n; i++) {
        printf("tablica[%.1d] = %.1d\n", i, tablica[i]);
    }
    free(tablica);
    return 0;
}

void sortuj(int *pt, int N) {
int i, i_min, min, j;
  for (j=N-1;j>0;j--){
    min = *pt;
    i_min = 0;
    for (i=1;i<=j;i++)
      if (*(pt+i)>min){
        min = *(pt+i);
        i_min = i;
      }
    *(pt+i_min) = *(pt+j);
    *(pt+j) = min;
  }
} 

0
au7h napisał(a):
#include <stdio.h>
#include <stdlib.h>
#define n 5

void sortuj(int *a, int N);
int main()
{
    int tablica[n];

srand(time(NULL));
    for (int i = 0; i < n; i++) {
        tablica[i] = rand();
    }

sortuj(tablica, n);
    for (int i = 0; i < n; i++) {
        printf("tablica[%.1d] = %.1d\n", i, tablica[i]);
    }
    return 0;
}

void sortuj(int *pt, int N) {
int i, i_min, min, j;
  for ( j = N-1; j > 0; j-- ){
    min = pt[0];
    i_min = 0;
    for ( i = 1; i <= j; i++ )
      if ( pt[i] > min ){
        min = pt[i];
        i_min = i;
      }
    pt[i_min] = pt[j];
    pt[j] = min;
  }
} 

Kod działa! Dziękuję bardzo za pomoc i poświęcony czas :))

0
void sortuj(int * tab, int N) {
    int * lastPtr = tab + N - 1;
    int * ptr;
    int temp;
    while(N--) {
        for(ptr = tab; ptr < lastPtr; ++ptr) {
            if(*ptr > *(ptr + 1)) {
                temp = *ptr;
                *ptr = *(ptr +1);
                *(ptr + 1) = temp;
            }
        }
        --lastPtr;
    }
}

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