白話の経典のアルゴリズムのシリーズの1つの泡の順序付けの3種類の方案
2560 ワード
http://blog.csdn.net/morewindows/article/details/6657829
バブルソートは、小さいものから大きいものへのソートの例として、非常に容易に理解され、実装される.
配列長をNとする.
1.隣接する前後の2つのデータを比較し、前のデータが後のデータより大きい場合、2つのデータを交換する.
2.このように配列の0番目のデータをN-1番目のデータに1回遍歴すると、最大のデータは配列のN-1番目の位置に「沈」する.
3.N=N-1で、Nが0でない場合は前の2つのステップを繰り返し、そうでない場合はソートが完了します.
定義に従ってコードを簡単に書きます.
次に最適化し、フラグを設定します.このフラグが交換された場合はtrue、そうでない場合はfalseです.明らかに交換が発生しなかった場合は、ソートが完了したことを示します.
さらに最適化します.100個の数の配列があって、前の10個だけが無秩序で、後ろの90個はすでに順序が整い、前の10個より大きい場合、最初の遍歴後、最後に交換が発生した位置は必ず10未満であり、この位置の後のデータは必ず秩序が整っているので、この位置を記録して、2回目は配列の頭からこの位置まで遍歴すればよい.
バブルソートは結局効率の低いソート方法であり,データ規模が小さい場合に採用できる.データ規模が大きい場合は、他のソート方法が望ましい.
完全なコードは次のとおりです.
バブルソートは、小さいものから大きいものへのソートの例として、非常に容易に理解され、実装される.
配列長をNとする.
1.隣接する前後の2つのデータを比較し、前のデータが後のデータより大きい場合、2つのデータを交換する.
2.このように配列の0番目のデータをN-1番目のデータに1回遍歴すると、最大のデータは配列のN-1番目の位置に「沈」する.
3.N=N-1で、Nが0でない場合は前の2つのステップを繰り返し、そうでない場合はソートが完了します.
定義に従ってコードを簡単に書きます.
// 1
void BubbleSort1(int a[], int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 1; j < n - i; j++)
if (a[j - 1] > a[j])
Swap(a[j - 1], a[j]);
}
次に最適化し、フラグを設定します.このフラグが交換された場合はtrue、そうでない場合はfalseです.明らかに交換が発生しなかった場合は、ソートが完了したことを示します.
// 2
void BubbleSort2(int a[], int n)
{
int j, k;
bool flag;
k = n;
flag = true;
while (flag)
{
flag = false;
for (j = 1; j < k; j++)
if (a[j - 1] > a[j])
{
Swap(a[j - 1], a[j]);
flag = true;
}
k--;
}
}
さらに最適化します.100個の数の配列があって、前の10個だけが無秩序で、後ろの90個はすでに順序が整い、前の10個より大きい場合、最初の遍歴後、最後に交換が発生した位置は必ず10未満であり、この位置の後のデータは必ず秩序が整っているので、この位置を記録して、2回目は配列の頭からこの位置まで遍歴すればよい.
// 3
void BubbleSort3(int a[], int n)
{
int j, k;
int flag;
flag = n;
while (flag > 0)
{
k = flag;
flag = 0;
for (j = 1; j < k; j++)
if (a[j - 1] > a[j])
{
Swap(a[j - 1], a[j]);
flag = j;
}
}
}
バブルソートは結局効率の低いソート方法であり,データ規模が小さい場合に採用できる.データ規模が大きい場合は、他のソート方法が望ましい.
完全なコードは次のとおりです.
void sortHello(int a[],int len1)
{
for(int i=0;i<=len1;i++)
{
for(int j=i;j<=len1;j++)
{
if(a[i]>a[j])
{
swap(a[i],a[j]);
}
}
}
}
BOOL falg;
void sortHello1(int a[],int len1)
{
for(int i=0;i<=len1;i++)
{
falg=false;
for(int j=1;j<=len1-i;j++)
{
if(a[j]<a[j-1])
{
swap(a[j],a[j-1]);
falg=true;
}
}
if(!falg)
return;
}
}
void BubbleSort3(int a[],int n)
{
int j,k;
int flag;
flag=n;
while(flag>0)
{
k=flag;
flag=0;
for(j=1;j<=k;j++)
{
if(a[j-1]>a[j])
{
swap(a[j-1],a[j]);
flag=j;
}
}
}
}
int main(void)
{
int a[]={0,2,4,6,9,20,1,3,4,5,67,8};
int len1=(sizeof(a)/sizeof(int))-1;
sortHello(a,len1);
for(int i=0;i<=len1;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}