简单排序

2019-06-17  本文已影响0人  雨落八千里
  • 快速排序
#include<bits/stdc++.h>
using namespace std;
int a[100];
void swap1(int a[],int i,int j)
{
    int t=a[i];
     a[i]=a[j];
    a[j]=t;
}
int pro(int a[ ],int p,int r)
{
    int i=p;
    int j=r+1;
    int x=a[p];
    while(1)
     {
           while(i<r&&a[++i]<x);
           while(a[--j]>x);
           if(i>=j)
           {
                 break;
          }
           swap1(a,i,j);
    }
     swap1(a,p,j);
     return j;
}
void quicksort(int a[ ],int p,int r)
{
    if(p<r)
     {
           int q=pro(a,p,r);
           quicksort(a,p,q-1);
           quicksort(a,q+1,r);
     }
}
int main( )
{
     int n;
     cout<<"输入数的个数:"<<endl;
     cin>>n;
     cout<<"输入数:"<<endl;
     for(int i=0;i<n;i++)
    {
           cin>>a[i];
     }
     quicksort(a,0,n-1);
     cout<<"输出排序后的数组:"<<endl;
     for(int i=0;i<n;i++)
    {
           cout<<a[i]<<" ";
    }
     cout<<endl;
     return 0;
}
  • 插序排序
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main( )
{
     int n;
    cout<<"输入数的个数:"<<endl;
    cin>>n;
    cout<<"输入数:"<<endl;
    for(int i=0;i<n;i++)
    {
           cin>>a[i];
    }
     for(int i=0;i<n;i++)
     {
           int tmp=a[i];
           int j=i-1;
           while(j>=0&&a[j]>tmp)
           {
                 a[j+1]=a[j];
                 j--;
           }
           a[j+1]=tmp;
     }
     cout<<"输出排序后的数组:"<<endl;
     for(int i=0;i<n;i++)
     {
           cout<<a[i]<<" ";
     }
     cout<<endl;
    return 0;
}
  • 冒泡排序
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main( )
{
      int n;
      cout<<"输入数的个数:"<<endl;
      cin>>n;
      cout<<"输入数:"<<endl;
      for(int i=0;i<n;i++)
      {
            cin>>a[i];
      }
      for(int i=0;i<n-1;i++)
      {
           for(int j=0;j<n-i-1;j++)
           {
                 if(a[j]>a[j+1])
                 {
                       int t=a[j+1];
                       a[j+1]=a[j];
                       a[j]=t;
                 }
           }
      }
      cout<<"输出排序后的数组:"<<endl;
      for(int i=0;i<n;i++)
      {
            cout<<a[i]<<" ";
      }
      cout<<endl;
      return 0;
}
  • 希尔排序
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main( )
{
      int n;
      cin>>n;
      int t=n;
      for(int i=0;i<n;i++)
      {
            cin>>a[i];
      }
      while(t)
      {
            t/=2;
            for(int i=0;i<t;i++)
            {
                  for(int j=i+t;j<n;j=j+t)
                  {
                        if(a[j]<a[j-t])
                        {
                              int k=j-t;
                              int tep=a[j];
                              while(a[k]>tep&&k>=0)
                              {
                                    a[k+t]=a[k];
                                    k-=t;
                              }
                               a[k+t]=tep;
                        }

                  }
            }
      }
      for(int i=0;i<n;i++)
      {
            cout<<a[i]<<" ";
      }
      cout<<endl;
      return 0;
}
  • 选择排序
#include<bits/stdc++.h>
using namespace std;
int a[100];
int main( )
{
      int n;
      cin>>n;
      for(int i=0;i<n;i++)
      {
            cin>>a[i];
      }
      for(int i=0;i<n;i++)
      {
            int minx=i;
            for(int j=i+1;j<n;j++)
            {
                  if(a[j]<a[minx])
                  {
                        minx=j;
                  }
            }
            int t=a[i];
            a[i]=a[minx];
            a[minx]=t;
      }
      for(int i=0;i<n;i++)
      {
            cout<<a[i]<<" ";
      }
      cout<<endl;
      return 0;
}
  • 归并排序
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define MAX 55000
using namespace std;
ll n;
const int mod=1e9+7;
int a[MAX];
int L[MAX],R[MAX];
void mersort(int a[ ],int n,int left,int mid,int right )
{
      int i,j,k;
      int n1=mid-left;
      int n2=right-mid;
      for(i=0;i<n1;i++) L[i]=a[left+i];
      for(i=0;i<n2;i++) R[i]=a[mid+i];
      L[n1]=mod,R[n2]=mod;
      i=j=0;
      for(k=left;k<right;k++)
      {
            if(L[i]<=R[j])
            {
                  a[k]=L[i++];
            }
            else
            {
                  a[k]=R[j++];
            }
      }

}
void mergasort(int a[ ],int n,int left,int right)
{
      int mid;
      ll v1,v2,v3;
      if(left+1<right)
      {
            mid=(left+right)/2;
            mergasort(a,n,left,mid);
            mergasort(a,n,mid,right);
            mersort(a,n,left,mid,right);
      }
}
int main( )
{
     cin>>n;
     for(int i=0;i<n;i++)
     {
           cin>>a[i];
     }
     mergasort(a,n,0,n);
     for(int i=0;i<n;i++)
     {
           if(i)
           {
                 cout<<" ";
           }
           cout<<a[i];
     }
     cout<<endl;
     return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读