TheAlgorithms-C-Plus-Plus/Sorting/Bubble Sort.cpp

89 lines
2.6 KiB
C++
Raw Normal View History

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()
{
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: ";
cin >> n;
2018-12-22 13:01:52 +08:00
vector<int> numbers;
cout << "Enter " << n << " numbers: ";
int num;
2019-02-09 15:55:57 +08:00
//Input
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
}
2016-07-16 18:56:48 +08:00
//Bubble Sorting
for(int i=0; i<n; i++)
2016-07-16 18:56:48 +08:00
{
swap_check=0;
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;
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)
{
break;
}
2016-07-16 18:56:48 +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
}
/*
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 yyi atayınca xin 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 yye 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ç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.
*/