1、不带标记的冒泡排序
void bubbleSort(int a[],int n){
int temp=0;
for(int i=1;i<n;i++){
for(int j=0;j<n-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
2、带标记的冒泡排序
void bubbleSort( int a[], int n)
{
int temp=0;
bool flag= true; //falg为true表示发生了交换
for( i=1; i<n && flag; i++ ) //没有元素交换则停止循环
{
flag = false; //false表示没有交换
for( j=0; j<n-i; j++ )
{
if( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
flag = true;
}
}
}
}
3、双向冒泡排序
void dbSort(int a[], int n) {
int temp = 0;
bool flag = true; // flag=true为发生了交换的标志
for (int i = 1; flag; i++)// 如果flag为true则发生了交换,继续循环,为false则停止
{
flag = false;
for (int j = n - i; j >= i; j--)// 由后往前找最小的元素
{
if (a[j] < a[j - 1]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
flag = true;
}
}
for (int k = i; k < n - i; k++)// 由前往后找最大的元素
{
if (a[k] > a[k + 1]) {
temp = a[k];
a[k] = a[k + 1];
a[k + 1] = temp;
flag = true;
}
}
}
}