您的位置:首页 > 其它

冒泡排序算法的学习

2015-07-24 11:57 267 查看
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;

                   
}

             
}

        }

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: