Bir fonksiyona bir bir dizi geçerseniz, C size referansla erişim sağlar. Referansla erişirseniz de asıl veriyi değiştirmiş olursunuz.
Yani asıl veriye erişim sağlayıp sıraladığınızda olması gereken olur ve ilk veriniz değişir.
Referansla erişimi önlemenin bir yolu eriştiğiniz referans yerine başka bir dizi kullanmaktır. Ki biz buna zaten diziyi kopyalamak diyoruz.
Local bir değişken ile bir dizi aynı mantıkla çalışmaz.
Local bir dizi tanımlamak da mümkün ama burada sizin sorunuz net değil.
Sıralma algoritmanız lokal bir dizi yerine ilk dizi üzerinde işlem yapıyor. Kodunuzu fonksiyon içine ikincil bir dizi tanımlayıp bu diziye iik dizidekiv verinizi kopyalabilirsiniz.
Bu durumda yazdırmanız gereken dizi kinci dizi olur ve local tanımladığınız diziyi fonksiyonu sonlandırırken serbest bırakacağınız için ikinci diziniz de yok olur.
Bir dizinin bir yerlerde oluşturulması gerkir değil mi? Sonuçta ilk veri dizinize dokunmayacak ama sıralanmanız gereken ikinci bir listenizin bir yerlerde oluşturulması gerekir. Ve buna main içinde erişmeniz gerekir ki yazdırabilirsiniz.
Sırf can sıkıntısında chatgpt ile biraz sohbet ettim.
Dönüş parametresi olarak bir dizi referansı verelim. Onu yazdırsın fantazi olur dedim.
Sohbetin kodu:
#include <stdio.h>
#include <stdlib.h>
// Bubble sort algoritması ve sıralanmış diziyi döndüren fonksiyon
int* bubbleSort(int* dizi, int len) {
// Dinamik bellek tahsisi yaparak yeni bir dizi oluştur
int* sortedDizi = (int*)malloc(len * sizeof(int));
if (sortedDizi == NULL) {
printf("Memory allocation failed!\n");
return NULL;
}
// Orijinal diziyi kopyala
for (int i = 0; i < len; i++) {
sortedDizi[i] = dizi[i];
}
int temp;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (sortedDizi[j] > sortedDizi[j + 1]) {
// Değerleri yer değiştir
temp = sortedDizi[j];
sortedDizi[j] = sortedDizi[j + 1];
sortedDizi[j + 1] = temp;
}
}
}
return sortedDizi; // Sıralanmış dizinin başlangıç adresini döndür
}
int main() {
int dizi1[5] = {4, 5, 2, 7, 2};
int size = 5;
// Bubble sort fonksiyonunu çağır ve sıralanmış diziyi al
int* sortedDizi = bubbleSort(dizi1, size);
if (sortedDizi == NULL) {
return 1; // Bellek tahsisi başarısız olduysa programı sonlandır
}
// Sıralanmış diziyi yazdır
printf("Sorted Array: ");
for (int i = 0; i < size; i++) {
printf("%d, ", sortedDizi[i]);
}
printf("\n");
// Dinamik olarak ayrılan belleği serbest bırak
free(sortedDizi);
return 0;
}
Kodu çalıştırmadım. Ama yazırmak için sıralanmış bir dizi gerekiyorsa bir bakmakta fayda var.
Kodu derlemedim. Ama denemeye değer.