一般的なソートアルゴリズムのバブルソート(C++実装)
------C++バブルソートアルゴリズム
アルゴリズム解析:
配列長をNとする.
1.隣接する前後の2つのデータを比較し、前のデータが後のデータより大きい場合、2つのデータを交換する.
2.このように配列の0番目のデータをN-1番目のデータに1回遍歴すると、最大のデータは配列のN-1番目の位置に「沈」する.
3.N=N-1で、Nが0でない場合は前の2つのステップを繰り返し、そうでない場合はソートが完了します.
プログラムコード:
本文は“skyarac”のブログから出て、転載して作者と連絡してください!
アルゴリズム解析:
配列長を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”のブログから出て、転載して作者と連絡してください!