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
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/yuemo/p/5565071.html
Copyright © 2011-2022 走看看