zoukankan      html  css  js  c++  java
  • 排序算法之——冒泡排序

    1.算法思想(参考:https://www.cnblogs.com/nicaicai/p/12549959.html)

     通过对待排序的序列从前向后依次比较相邻元素的值,如果发现逆序则交换。
    逆序的含义:如果想把序列从小到大排序,那么两个数中前面的比后面的大就是逆序。
    若需求是将序列从小到大排序,那么每一趟比较都会把值较大的逐渐从前面移动到后面。

    2.冒泡排序的C语言实现

    (1)排序的总趟数和每趟排序数组元素的比较次数都设置为数组大小n-1,排序的比较次数为(n-1)*(n-1)次

    //冒泡排序 
    #include <stdio.h>
    int main()
    {
        //定义一个整型数组
        int a[]={9,8,3,5,2,10,7}; 
        int i,j,n;
        //整个数组的大小除以第一个数组元素的大小 ,得到数组的长度 
        n=sizeof(a)/sizeof(a[0]); 
        //排序前的数组
         printf("排序前:");
         for(i=0;i<n;i++)
         {
             printf("a[%d]=%d ",i,a[i]);
         } 
         for(i=0;i<n-1;i++)  //排序的总趟数,等于数组大小-1 
         {
             for(j=0;j<n-1;j++)   //每一趟数组元素的比较次数 
            {
                 /*如果前一个数组元素比之后一个数组元素大,则交换它们的位置*/
                 if(a[j]>a[j+1]) 
                 {
                     int temp;
                     temp=a[j];
                     a[j]=a[j+1];
                     a[j+1]=temp;    
                 }
            } 
         }
         printf("
    ");
        //排序后的数组
        printf("排序后:");
         for(i=0;i<n;i++)
         {
             printf("a[%d]=%d ",i,a[i]);
         } 
        return 0;
    }

    运行结果:

    (2)改进的冒泡排序算法,每趟排序的总比较次数依次减1,已经排序好的数组元素不再参与每趟排序的比较,最坏的情况下比较次数为n-1+n-2.........+1=n*(n-1)/2次。

    //冒泡排序 
    #include <stdio.h>
    int main()
    {
        //定义一个整型数组
        int a[]={9,8,3,5,2}; 
        int i,j; 
        //排序前的数组
         printf("排序前:");
         for(i=0;i<5;i++)
         {
             printf("a[%d]=%d ",i,a[i]);
         } 
         for(i=0;i<5-1;i++)  //排序的总趟数,等于数组大小-1 
         {
             for(j=0;j<5-1-i;j++)   //每一趟数组元素的比较次数 
            {
                 if(a[j]>a[j+1])
                 {
                     int temp;
                     temp=a[j];
                     a[j]=a[j+1];
                     a[j+1]=temp;    
                 }
            } 
         }
         printf("
    ");
        //排序后的数组
        printf("排序后:");
         for(i=0;i<5;i++)
         {
             printf("a[%d]=%d ",i,a[i]);
         } 
        return 0;
    }

    运行结果:

    参考文章:

    http://c.biancheng.net/view/6506.html

    https://www.cnblogs.com/nicaicai/p/12549959.html

    转载文章链接已标明,如有侵权请告知。文章仅作为知识记忆所用,如有错误,敬请指正。
  • 相关阅读:
    node介绍和环境安装
    有些运算
    时间与日期
    ISE综合工具XST综合约束相关
    Quartus和ISErom文件格式
    IC设计流程及工具
    PAD PIN
    SQL SERVER 2008 利用发布订阅方式实现数据库同步
    .NET中,写一个函数找出一个整数数组中,第二大的数(整数数组作为函数参数)
    网络嵌入式设备
  • 原文地址:https://www.cnblogs.com/YorkZhangYang/p/13983550.html
Copyright © 2011-2022 走看看