• 31排序算法之冒泡排序


    排序算法之冒泡排序

    原理:反复扫描数组a,比较相邻元素a[i]与a[i+1]。

    若逆序(a[i]>a[i+1])就交换

    自上而下地扫描的下降法

          最大元素下降到底部

    自下而上地扫描的上升法

          最小元素上升到数组顶部 

    上升法图例:

    简单的冒泡排序算法(上升法)

    void bubble_sort(int a[ ],int n)

        { int i,j,x;

    1.  for(j=0;j<n-1; j++)  // j是本遍扫描终点下标

    2.    for(i=n-2;i>=j; i - - )

    3.       if(a[i]>a[i+1])  //逆序

    4.          { x=a[i];  a[i]=a[i+1];  a[i+1]=x; }

    }

    带交换否标记的汽泡排序算法(下降法)

    void bubble_sort_2(int a[ ],int n)

       { int  i,j,x,flag=1;

    1.   j=n-2; 

    2.   while(flag)

    3.   {  flag=0;

    4.       for(i=0;i<=j;i++)  if(a[i]>a[i+1])

    5.          {  x=a[i];  a[i]=a[i+1]; a[i+1]=x;   flag=1;  }

    6.      j- - ;  

           }

    }

    冒泡排序源代码:
    //1冒泡排序(大数值沉淀在最后)
    void BubbleSort(int *arr,int num)
    {
        int i,j;//循环变量
        int count;//判断是否交换
        for(i=0;i<num-1;++i)//比较趟数
        {
            count=0;
                for(j=0;j<num-1-i;++j)//每一趟比较的次数
                {
                    if(arr[j]>arr[j+1])
                    {
                        int temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                        count++;
                    };
                };
                if(count==0)
                    break;
        };
    };
    
    int main()
    {
        int arr[10]={3,5,8,2,4,13,9,1,16,7};
        BbbleSort(arr,10);
        for(int i=0;i<10;++i)
            printf("%d ",arr[i]);
        getchar();
        return 0;
    }
  • 相关阅读:
    Class加载顺序
    Java中9大内置基本数据类型Class实例和数组的Class实例(转载)
    java配置日志总结
    Java格式化CST时间(mysql date类型)
    对称二叉树
    模拟--滑动窗口最大值
    group by两个条件
    P1996 约瑟夫问题
    C++命名空间、标准库(std,全局命名空间)
    java中引用对比C++指针
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/8509807.html
Copyright © 2020-2023  润新知