一般的なソートアルゴリズムのバブルソート(C++実装)


------C++バブルソートアルゴリズム
アルゴリズム解析:
配列長をNとする.
1.隣接する前後の2つのデータを比較し、前のデータが後のデータより大きい場合、2つのデータを交換する.
2.このように配列の0番目のデータをN-1番目のデータに1回遍歴すると、最大のデータは配列のN-1番目の位置に「沈」する.
3.N=N-1で、Nが0でない場合は前の2つのステップを繰り返し、そうでない場合はソートが完了します.
プログラムコード:
#include<iostream>
using namespace std;
template<class T>
void Swap(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
//    
template<class T>
void print_info(T a[],int n)
{
cout<<"   :";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
template<class T>
void BubbleSort_01(T a[],int n)
{
int i,j,k;
T t;
for(i=n-1;i>0;i=k)// i                   
for(k=j=0;j<i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
k=j;//      ,         
}
}
//  02       
template <class T>
void BubbleSort_02(T a[],int n)
{
//  T temp;
for(int i=n-1;i>0;i--)
for(int j=0;j<i;j++)
if(a[j]>a[j+1])
Swap(a[j],a[j+1]);
}
//  03
template <class T>
void BubbleSort_03(T a[],int n)
{
for(int i=1;i<n;i++)
for(int j=0;j<n-i;j++)
if(a[j]>a[j+1])
Swap(a[j],a[j+1]);
}
//     03
/*
      ,          ,  true,   false。
             ,        。
*/
template <class T>
void BubbleSort_04(T a[],int n)
{
bool flag=true;
int k=n;
while(flag)
{
flag=false;
for(int i=0;i<k-1;i++)
if(a[i]>a[i+1])
{
Swap(a[i],a[i+1]);
flag=true;
}
k--;
}
}
//     05
/*
   100     ,   10   ,  90            10   ,
         ,             10,                 ,
      ,                     。
*/
template<class T>
void BubbleSort_05(T a[],int n)
{
int flag=n;
int k=flag;
while(flag>0)
{
k=flag;
flag=0;
for(int i=0;i<k-1;i++)
if(a[i]>a[i+1])
{
Swap(a[i],a[i+1]);
flag=i+1;
}
}
}
void main()
{
int a[]={8,3,2,5,9,3,6};
//BubbleSort_01(a,7);
//BubbleSort_02(a,7);
//BubbleSort_03(a,7);
//BubbleSort_04(a,7);
BubbleSort_05(a,7);
print_info(a,7);
}

本文は“skyarac”のブログから出て、転載して作者と連絡してください!