2016-07-16 18:56:48 +08:00
|
|
|
|
//Bubble Sort
|
|
|
|
|
|
|
|
|
|
#include<iostream>
|
2018-12-22 13:01:52 +08:00
|
|
|
|
#include<vector>
|
2016-07-16 18:56:48 +08:00
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
{
|
2017-05-27 20:40:04 +08:00
|
|
|
|
int n;
|
2019-02-09 15:55:12 +08:00
|
|
|
|
short swap_check=0;
|
2019-02-09 15:55:57 +08:00
|
|
|
|
cout << "Enter the amount of numbers to sort: ";
|
2017-05-27 20:40:04 +08:00
|
|
|
|
cin >> n;
|
2018-12-22 13:01:52 +08:00
|
|
|
|
vector<int> numbers;
|
|
|
|
|
cout << "Enter " << n << " numbers: ";
|
|
|
|
|
int num;
|
2017-05-27 20:40:04 +08:00
|
|
|
|
|
2019-02-09 15:55:57 +08:00
|
|
|
|
//Input
|
2017-05-27 20:40:04 +08:00
|
|
|
|
for(int i=0; i<n; i++)
|
2016-07-16 18:56:48 +08:00
|
|
|
|
{
|
2018-12-22 13:01:52 +08:00
|
|
|
|
cin >> num;
|
|
|
|
|
numbers.push_back(num);
|
2016-07-16 18:56:48 +08:00
|
|
|
|
}
|
2017-05-27 20:40:04 +08:00
|
|
|
|
|
2016-07-16 18:56:48 +08:00
|
|
|
|
//Bubble Sorting
|
2017-05-27 20:40:04 +08:00
|
|
|
|
for(int i=0; i<n; i++)
|
2016-07-16 18:56:48 +08:00
|
|
|
|
{
|
2019-05-14 19:08:21 +08:00
|
|
|
|
swap_check=0;
|
|
|
|
|
|
2018-10-02 19:04:16 +08:00
|
|
|
|
for(int j=0; j<n-1-i; j++)
|
2016-07-16 18:56:48 +08:00
|
|
|
|
{
|
2018-12-22 13:01:52 +08:00
|
|
|
|
if(numbers[j]>numbers[j+1])
|
2016-07-16 18:56:48 +08:00
|
|
|
|
{
|
2019-02-09 15:55:12 +08:00
|
|
|
|
swap_check=1;
|
2019-05-14 19:08:21 +08:00
|
|
|
|
swap(numbers[j], numbers[j+1]); //swap yer değiştirme demektir. Yani j. sayi, j+1. sayıdan büyükse yer değiştir anlamındadır.
|
2016-07-16 18:56:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2019-02-09 15:55:12 +08:00
|
|
|
|
if(swap_check == 0)
|
2018-10-02 19:04:16 +08:00
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
2016-07-16 18:56:48 +08:00
|
|
|
|
}
|
2017-05-27 20:40:04 +08:00
|
|
|
|
|
2016-07-16 18:56:48 +08:00
|
|
|
|
//Output
|
|
|
|
|
cout<<"\nSorted Array : ";
|
2018-12-22 13:01:52 +08:00
|
|
|
|
for(int i=0; i<numbers.size(); i++)
|
2016-07-16 18:56:48 +08:00
|
|
|
|
{
|
2018-12-22 13:01:52 +08:00
|
|
|
|
if(i != numbers.size() -1)
|
|
|
|
|
{
|
|
|
|
|
cout << numbers[i] << ", ";
|
|
|
|
|
}else
|
|
|
|
|
{
|
|
|
|
|
cout << numbers[i] << endl;
|
|
|
|
|
}
|
2016-07-16 18:56:48 +08:00
|
|
|
|
}
|
2019-02-09 15:55:12 +08:00
|
|
|
|
return 0;
|
2016-07-16 18:56:48 +08:00
|
|
|
|
}
|
2019-05-14 19:08:21 +08:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Bubble sort algoritmasının çalışma prensibi:
|
|
|
|
|
|
|
|
|
|
Bubble sort algoritmasının türkçesi kabarcık sıralama algoritmasıdır. Kabarcık denmesinin en önemli sebebi bu algoritmada en büyük sayının en sona atılmasıdır.
|
|
|
|
|
Tüm mantığını bunun üzerinedir.
|
|
|
|
|
Her iterasyonda en büyük sayı sona atılır ve iterasyonlar tamamlandığında sıralama gerçekleşmiş olur.
|
|
|
|
|
|
|
|
|
|
Swap Ne Demektir?
|
|
|
|
|
|
|
|
|
|
Yazılımda Swap demek iki değişkenin yer değiştirmesi demektir.
|
|
|
|
|
Bu işlem için ek bir değişkene ihtiyaç duyulur. x = 5, y = 10 olsun.
|
|
|
|
|
Biz istiyoruz ki x = 10, y = 5 olsun. İşte bunu yapmak için en bir değişken oluştururuz.
|
|
|
|
|
|
|
|
|
|
int z;
|
|
|
|
|
z = x;
|
|
|
|
|
x = y;
|
|
|
|
|
y = z;
|
|
|
|
|
|
|
|
|
|
Yukarıdaki işlem tipik bir yer değiştirme işlemidir.
|
|
|
|
|
x değerine y’yi atayınca x’in eski değeri kaybolur.
|
|
|
|
|
Bu yüzden biz z diye bir değişken oluşturup ilk başka x değerini orada sakladık, en son olarak da y’ye atadık.
|
|
|
|
|
|
|
|
|
|
Bubble Sort Algoritma Analizi (Best Case – Worst Case – Avarage Case) En iyi Durum – En Kötü Durum:
|
|
|
|
|
|
|
|
|
|
Bubble Sort En Kötü Durum (Worst Case) Performansı O(n²) şeklindedir. Neden? Çünkü Big O Notasyonu yazımızdan hatırlarsanız iç içe döngülerde algoritma karmaşıklığı hesaplarken döngülerin çarpımını alıyorduk.
|
|
|
|
|
n * (n – 1) çarpımı üzerinden bize yine O(n²) performansı gelir. En kötü durumda döngünün tüm adımları gerçekleşecektir.
|
|
|
|
|
Bubble Sort Ortalama Durum (Avarage Case) Performansı. Bubble Sort optimal bir algoritma değildir.
|
|
|
|
|
ortalama durumda da O(n²) performansı alınmaktadır.
|
|
|
|
|
Bubble Sort En iyi Durum (Best Case) Performansı. O(n) şeklindedir.
|
|
|
|
|
Ancak yukarıda paylaştığımız kodda en iyi durumu elde edemezsiniz. İyileştirilmiş bubble sort algoritması üzerinde bu durum gerçekleşir. Hemen aşağıda bulunmakta.
|
|
|
|
|
*/
|