zoukankan      html  css  js  c++  java
  • 各种排序算法整理(附带习题及代码)

    模板部分(想背的就背一下吧,但是不建议……毕竟排序用sort函数就行了,这些排序的算法只是为了锻炼你的思维逻辑能力罢了):

    1.选择排序

    #include<cstdio>
    
    #define N 100000+100
    
    int a[N],n;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          for(int i=1;i<n;i++)
            {
                int k=i;
                for(int j=i+1;j<=n;j++)
                  if(a[j]<a[k]) k=j;
                if(k!=i)
                  {
                      int p=a[k];
                      a[k]=a[i];
                      a[i]=p;
                  }
            }
        for(int i=1;i<n;i++)
          printf("%d ",a[i]);
        printf("%d",a[n]);
          return 0;
      }
    View Code

    2.冒泡排序

    #include<cstdio>
    #include<iostream>
    
    #define N 100000+100
    
    int a[N],n;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          for(int i=1;i<n;i++)
            for(int j=i+1;j<=n;j++)
              if(a[j]<a[i])
                {
                    int p=a[i];
                    a[i]=a[j];
                    a[j]=p;
                }
          for(int i=1;i<n;i++)
            printf("%d ",a[i]);
          printf("%d",a[n]);
          return 0;
      }
    View Code

    3.桶排序

    #include<cstdio>
    
    #define N 100000+100
    
    int a[N],n;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            {
                int k;
                scanf("%d",&k);
                a[k]++;
            }
          for(int i=0;i<N;i++)
            while(a[i]!=0)
              {
                  printf("%d ",i);
                  a[i]--;
              }
          return 0;
      }
    View Code

    4.插入排序

    #include<cstdio>
    #include<cstring>
    
    #define N 100000+100
    
    int k,a[N],n,m=1;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          for(int i=2;i<=n;i++)
            {
                int x=a[i];
                int j=i-1;
                while(x<a[j])
                  {
                a[j+1]=a[j];
                j--;
                     }
              a[j+1]=x;
            }
        for(int i=1;i<=n;i++)
          printf("%d ",a[i]);
          return 0;
       } 
    View Code

    5.快速排序

    #include<cstdio>
    
    #define N 100000+100
    
    int n,a[N];
    
    void qsort(int l,int r)
      {
          int mid=a[(l+r)/2];
          int i=l,j=r,p;
          do
            {
                while(a[i]<mid) i++;
                while(a[j]>mid) j--;
                if(i<=j)
                  {
                      p=a[i];
                      a[i]=a[j];
                      a[j]=p;
                      i++;j--;
                  }
            }while(i<=j);
        if(l<j) qsort(l,j);
        if(i<r) qsort(i,r);
          
      }
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          qsort(1,n);
          for(int i=1;i<=n;i++)
            printf("%d ",a[i]);
          return 0;
      }
    View Code

    6.sort函数(这部分就不介绍了,想学的去网上找吧)

    #include<cstdio>
    #include<algorithm>
    
    #define N 100000+100
    
    using namespace std;
    
    int a[N],n;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          sort(a+1,a+n+1);
          for(int i=1;i<n;i++)
            printf("%d ",a[i]);
          printf("%d",a[n]);
          return 0;
       } 
    View Code

    习题部分:

    1.codevs1076

    #include<cstdio>
    #include<algorithm>
    
    #define N 100000+100
    
    using namespace std;
    
    int a[N],n;
    
    int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
          sort(a+1,a+n+1);
          for(int i=1;i<n;i++)
            printf("%d ",a[i]);
          printf("%d",a[n]);
          return 0;
       } 
    View Code

    2.codevs 1361 知识排名

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[1001][1001];
    structnode{
      int ID;
      int sum;
     }s[1001];
    int cmp(node q,node p){
     if(q.sum!=p.sum)return q.sum>p.sum;
     else return q.ID<p.ID;}
    int main(){
    int i,j,N,M,id,b[1001];
        memset(b,0,sizeof(b));
        memset(s,0,sizeof(s));
        cin>>id>>N>>M;
        
        for(i=1;i<=N;i++)
           for(j=1;j<=M;j++)
             cin>>a[i][j];
        for(j=1;j<=M;j++)
           for(i=1;i<=N;i++)
            if(a[i][j]==0)b[j]++;
        for(i=1;i<=N;i++)
        { s[i].ID=i;  
          for(j=1;j<=M;j++)
            if(a[i][j]==1)s[i].sum+=b[j];
        }
        sort(s+1,s+1+N,cmp);
        for(i=1;i<=N;i++)
            if(s[i].ID==id){cout<<i;break;}
    return 0;
    }
    View Code
  • 相关阅读:
    Object.prototype的原型对象 格式化日期【js笔记】
    数组中去掉重复的 【js笔记】
    按照内容多少,每行自动按照内容较多的div设置其他div的高度【jq笔记】
    动态操作表格 【js笔记】
    关于记录任意选择行删除或者其他的操作【jq笔记】
    Good studying and day day up
    第三周星期一
    第二周星期天
    第二周星期六
    第二周星期五
  • 原文地址:https://www.cnblogs.com/yuemo/p/5565071.html
Copyright © 2011-2022 走看看