Posted by : 86Gems
30 March 2014
Thuật toán Shaker Sort
Thuật toán Shaker Sort là cải tiến của Bubble Sort nhưng được cải tiến từ sắp xếp 1 chiều thành 2 chiều.
Ý tưởng:
Giải thuật sẽ bắt đầu từ đầu hoặc cuối mảng,mỗi làn sắp xếp gồm 2 lượt: lượt đi và về. Ở lượt đi khi sắp xếp xong ta sẽ dùng biến k để đánh dấu trước vị trí đã được sắp xếp
Code:
#include <iostream>
using namespace std;
void sharer_sort(int a[], int n)
{
int tg,ex;
do
{
ex=0;
for (int i=n-1; i>0;i--)
{
if (a[i-1]>a[i])
{
tg=a[i-1];
a[i-1]=a[i];
a[i]=tg;
ex=1;
}
}
for(int j=1; j<n;j++)
{
if (a[j-1]>a[j])
{
tg=a[j-1];
a[j-1]=a[j];
a[j]=tg;
ex=1;
}
}
}
while(ex);
}
int main()
{
int n;
cout <<"Nhap so cac so hang can sap xep: ";
cin >> n;
int a[n];
cout<<"Nhap cac so hang: "<<endl;
for(int i=0;i<n;i++)
{
cout<<"a"<<i+1<<": " ;
cin >>a[i];
cout << endl;
}
sharer_sort(a,n);
cout<<"Day sau khi sap xep: ";
for(int i=0;i<n;i++)
cout<<a[i] << " ";
}