美文网首页
简单排序

简单排序

作者: 雨落八千里 | 来源:发表于2019-06-17 00:30 被阅读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;
}

相关文章

  • 常用排序算法(Python实现), 持续更新中

    一、非线性时间比较类排序 交换排序冒泡排序快速排序 插入排序简单插入排序希尔排序 选择排序简单选择排序堆排序 归并...

  • 基础算法|简单选择排序

    简单选择排序是一种排序算法,指在简单选择排序过程中,所需移动记录的次数比较少。简单选择排序是不稳定排序。 简单选择...

  • 选择排序-c语言描述

    选择排序分简单选择排序与堆排序两种,先介绍简单选择排序。1.简单选择排序在未排序的序列中找到最小(大)元素,存放到...

  • 算法学习之简单排序

    简单排序 简单排序有三种, 冒泡排序,选择排序,插入排序 冒泡排序 冒泡排序是一种易于实现的排序算法, 以升序为例...

  • 排序算法概述

    在本系列中我们综述十个常用排序算法,分别是简单插入排序、希尔排序、简单选择排序、快速排序、冒泡排序、堆排序、归并排...

  • 排序

    简单排序: 插入排序 冒泡排序 快速排序 归并排序 基数排序

  • [iOS基础]OC常用算法实现

    希尔排序 快速排序 直接插入排序 简单选择排序 冒泡排序

  • 常用算法OC实现

    希尔排序 快速排序 直接插入排序 简单选择排序 冒泡排序

  • 排序算法的实现

    用java对常用内部排序算法的实现。 对冒泡排序,简单选择排序,直接插入排序,希尔排序,归并排序的简单实现(缺少快...

  • GO语言实现 一 基本排序

    基本排序包括简单选择排序和插入排序,本文将就这两种排序进行 golang语言实现,并引出希尔排序 一.简单选择排序...

网友评论

      本文标题:简单排序

      本文链接:https://www.haomeiwen.com/subject/zijgfctx.html