Golang Dilinde Bubble Sort Algoritması

Codx

Katılımcı Üye
30 Tem 2017
309
1


Merhabalar, iyi forumlar herkese.

Son zamanlarda hayatıma yeni giren bir yazılım dili olan Golang diline çalışıyorum, ve öğrenmenin en iyi yolu kullanmaktır. Bende veri yapıları üzerinde kullanıyorum.

Bubble sort algoritması yazdıktan sonra analizini yapacağız, ve golang'a ait bir veri yapısı olan "slice"ı kullanacağız.

Başlayalım.

Visual Studio Code üzerinde yazacağım. Bunu tercih etme sabebim çok güzel ve pratik imkanlar sağlayan bir IDE olması.

Bunu yaparken "fmt" ve "math/rand" paketlerini kullanacağız. "fmt" ile çıktı bastıracağız. "math/rnd" ile elimizde random olarak oluşturulmuş bir veri seti olması için kullanacağız.

En başta standart taslağımızı oluşturuyoruz.



Şimdi bir fonksiyon yazacağız. Yazdığımız fonksiyon bir parametre alacak ve int tipinde bir array döndürecek. Yani şu şekilde gözükecektir.

Kod:
func genSlice(size int) []int {
	
}

İçeriği ise şu şekilde olacak, bir slice oluşturacağız. Bu slice'ı oluştururken kullanacağımız uzunluk bilgisi parametremizden gelecek. Yani bu durumda içerisinde şu şekilde bir ifade bulunacaktır.

Kod:
func genSlice(size int) []int {
	slice := make([]int, size, size)
	
}

Şimdi biz bir slice generate ettik içerisine random değer atayacağız. Bunun en pratik yolu döngü kullanmaktır. Bu durumda ise işlem şu şekli almaktadır.

Kod:
func genSlice(size int) []int {
	slice := make([]int, size, size)
	for i := 0; i < size; i++ {
		slice[i] = rand.Intn(999) - rand.Intn(999)
	}

	return slice
}

slice isimli slice içerisine, slice'ın i. değerine random olarak generate edilen sayı yada rakamlar atanmaktadır. Sonuç olarak bize bu fonksiyondan int tipinde bir dizi return edilmektedir.

Şimdi gelelim sıralamamıza.

Bubble Sort için yazacağımız fonksiyon parametre olarak bir array alacak. Bu array içerisinde indexlerini karşılaştıracak ve bir sıralama yapılacak.

Şimdi bizim bir uzunluğumuz olmalı ki bu uzunluk içerisinde döngü ile işlem yapacağımız için işimize yarayacaktır. Birazda bool tipini kullanarak kontrol sağlayacağız.

Bu fonksiyonumuzun şuanki hali şu şekilde olacaktır.


Kod:
func bSort(items []int)  {
	var (
		x = len(items)
		sorted = false
	)

	
}

Buradan sonraki adım, islem tamamlandığı zaman sorted değişkenimiz işlem tamamlandığı zaman true olarak dönecek for döngümüz işlemin bitiminde işe yarayacaktır.

Kod:
package main

import (
	"fmt"
	"math/rand"
)

func main() {

	slice := genSlice(20)
	fmt.Println("Generated \n", slice)
	bSort(slice)
	fmt.Println("RESULT \n", slice)
}

func genSlice(size int) []int {
	slice := make([]int, size, size)
	for i := 0; i < size; i++ {
		slice[i] = rand.Intn(999) - rand.Intn(999)
	}

	return slice
}

func bSort(items []int) {
	var (
		x      = len(items)
		sorted = false
	)

	for !sorted { //sorted false olduğu sürece
		swapped := false           //işlemimizin bittiğini kontrol edeceğiz
		for i := 0; i < x-1; i++ { //parametremizden gelen uzunluğun miktarınca dönücez
			if items[i] < items[i+1] { //geçerli index ile bir sonraki index birbirinden küçük mü diye kontrol ediyorum
				items[i], items[i+1] = items[i+1], items[i] //eğer küçükse yer değiştiriyorum
				swapped = true
			}
		}

		if !swapped { //eğer for döngümüz bittiyse swapped bize true olarak gelecektir
			sorted = true //false olarak baslattigimiz degisken true olarak donuyor ve döngü koşulu artık sağlamadığı için işlem bitiyor
		}

	}
}



Sonuçlarımız büyükten küçüğe sıralanmış olacaktır.

Okuduğunuz için teşekkür eder, iyi forumlar dilerim.




 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.