• 排序之冒泡排序


    #include<stdio.h>  /*头文件*/
    
    #define M 100   /*定义常量*/
    int R[M];   /*定义数组*/
    int main()
    {
          
        int i,j,temp,n;
       
        printf("input n size:");/*数组大小*/
        scanf("%d",&n);
        
        printf("input  number  one by one:
    ");
        for(i=1;i<=n;i++)/*一个一个的输入数组元素*/
        {
            scanf("%d",&R[i]);
        }
        printf("before sort numbers:
    ");
        for(i=1;i<=n;i++)/*打印排序之前的数组元素*/
        {
                  printf("%4d",R[i]);
        }
        printf("
    ");
        for(i=1;i<=n-1;i++)/*排序趟数*/
        {
            for(j=1;j<=n-i;j++)/*每趟比较次数*/
            {
                if(R[j]>R[j+1]) /*判断前一个数据元素是否比后一个大,大于则交换*/
                {
                    temp=R[j];
                    R[j]=R[j+1];
                    R[j+1]=temp;
                }
            }
        }
        printf(" after sort numbers:
    ");
        for(i=1;i<=n;i++)  /*打印冒泡排序之后序列*/
        {
           printf("%4d",R[i]);    
        }
        
    }
    View Code


    思想:首先是将第1个数和第2个数进行比较,若为逆序(R[1]>R[2]),则交换这两个数的位置,然后比较第2个数和第3数,以此类推,直至第n-1个数和第n个数进行比较为止.这个过程称为第一趟冒泡排序,排序结果是最大的数被排在了最后。即R[n].

        接着进行第二趟冒泡排序,即对前n-1个数再次进行两两比较,若为逆序则交换,排序结果是第二大的数被排在倒数第二。即R[n-1].然后进行第三趟冒泡排序,对前n-2个数进行同样的操作,以此类推。

         比如:10个数进行冒泡排序,必须进行9趟排序,每一趟中两个数比较次数是不相同的,第一趟比较10-1=9次(10为许排序的数目,1为该趟的趟数),第二趟要比较10-2=8次,以此类推,第i趟要比较的次数=10-i.

        如有n个数,则要进行n-1趟排序(由外循环控制),第i趟两数之间的比较要进行n-i次(由内循环控制).

    冒泡排序速记口诀(降序):

    N个数字来排序,两两相比大靠前,

    外层循环N-1,内层循环N-1-i.

    如果要升序,

    只要把程序中的if (a[j] < a[j + 1])

    小于号换成大于号就行了

  • 相关阅读:
    集合框架
    hashtable
    测试3
    opcache的威力
    信息的信息
    php blog to explore
    BEHAT安装
    Failed to start: SocketListener0@0.0.0.0:4444
    模板方法设计模式
    mysqldump
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499292.html
Copyright © 2020-2023  润新知