zoukankan      html  css  js  c++  java
  • 排序2之冒泡排序和选择排序

    #include <stdio.h>
    #define N 10
    int main()
    {
        int a[N];
        int i,j,temp;
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
        for(i=0;i<N-1;i++) //冒泡排序的核心代码,通过比较相邻两个,达到排序效果.
          for(j=1;j<N-i;j++)//可以自己举例子按算法过程来实现
             if(a[j]<a[j-1])
              {
                  temp=a[j];
                  a[j]=a[j-1];
                  a[j-1]=temp;
              }
        for(i=0;i<N;i++)
        printf("%d ",a[i]);
        return 0;
    }

    那么冒泡排序是否可以优化呢,来看下面的程序
    #include <stdio.h>
    #define N 10
    int main()
    {
        int a[N];
        int i,j,temp,flag;//添加了一个flag标志
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
        for(i=0;i<N-1;i++)
        {
            flag=0;          //添加了一个flag
          for(j=1;j<N-i;j++)
             if(a[j]<a[j-1])
              {   flag=1;  // 想下flag的作用
                  temp=a[j];
                  a[j]=a[j-1];
                  a[j-1]=temp;
              }
            if(flag==0) //哈哈想到了吧,没想到的话,自己可以在纸上模拟这个过程,flag在一定情况下可以加快排序速度
              break;
        }
        for(i=0;i<N;i++)
        printf("%d ",a[i]);
        return 0;
    }
    当然可以把代码写的更简洁点

    #include <stdio.h>

    #define N 10

    #define swap(x,y) {int t=x;x=y;y=t;}

    int main()

    {

        int a[N];

        int i,j,flag=1;

        for(i=0;i<N;i++)

          scanf("%d",&a[i]);

        for(i=0;i<N-1&&flag;i++)

          for(flag=0,j=1;j<N-i;j++)

             if(a[j]<a[j-1])

              {   flag=1;

                  swap(a[j],a[j-1]);

              }

        for(i=0;i<N;i++)

        printf("%d ",a[i]);

        return 0;

    }

    选择排序
    #include <stdio.h>
    #define N 10
    #define swap(x,y) {int t=x;x=y;y=t;}
    int main()
    {
        int a[N];
        int i,j;
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
        for(i=0;i<N-1;i++)  
          for(j=i+1;j<N;j++)//注意这里与冒泡排序的区别
             if(a[i]>a[j])   //还有这
              swap(a[i],a[j]);//还有这
        for(i=0;i<N;i++)
        printf("%d ",a[i]);
        return 0;
    }
     
                                                                    ----江财小子
     
  • 相关阅读:
    tool公用工具方法
    angular5.x 拦截器 switchMap
    angular5.x拦截器 给get post请求添加参数user_token
    flex布局 阮一峰
    json.stringify()和json.parse()
    年份月数天数
    打印字母塔
    打印形状
    打印九九乘法表
    C语言猜数字游戏
  • 原文地址:https://www.cnblogs.com/372465774y/p/2421432.html
Copyright © 2011-2022 走看看