#include<iostream>
using namespace std;
//--------------------快速排序------------------------
void quicksort_cld(int a[],int left,int right)
{
    int i=left,j=right;
    if(i<j)    //递归的终止条件一定要记得判断
    {
        int x=a[i];
        while(i<j)
        {
          while(i<j && a[j]>x)
              j--;
          if(i<j)
          {
             a[i]=a[j];
             i++;
          }
          while(i<j && a[i]<x)
              i++;
          if(i<j)
          {
            a[j]=a[i];
            j--;
          }
        }
        a[i]=x;
        quicksort_cld(a,left,i-1);
        quicksort_cld(a,i+1,right);
    }
}
void quicksort(int a[],int n)
{
   if(a==NULL||n<=1) return;
   quicksort_cld(a,0,n);
}
//-------------------------输出-------------------------
void print(int a[],int n)
{
    for(int i=0;i<=n;i++)
    {
     cout<<a[i]<<" ";
    }
  cout<<endl;
}
//---------------------归并排序----------------------------
void mergersort_cld_cld(int a[],int left,int mid,int right,int p[])
{
  int startx=left,starty=mid+1;
  int endx=mid,endy=right;
  int temp=0;
  while(startx<=endx && starty<=endy)
  {
      if(a[startx]<a[starty])
      {
          p[temp++]=a[startx++];
      }
      else
      {
         p[temp++]=a[starty++];
      }
  }
  while(startx<=endx)
  {
   p[temp++]=a[startx++];
  }
  while(starty<=endy)
  {
   p[temp++]=a[starty++];
  }
  for(int i=0;i<temp;i++)
  {
    a[left+i]=p[i];
  }
}
void mergersort_cld(int a[],int left,int right,int p[])
{
     if(left<right)
     {
         int mid=(right+left)/2;
         mergersort_cld(a,left,mid,p);
         mergersort_cld(a,mid+1,right,p);
        mergersort_cld_cld(a,left,mid,right,p);
     
     }
}
void mergersort(int a[],int n)
{
  if(a==NULL || n<=1) return ;
  int *p=new int[n];
 mergersort_cld(a,0,n,p);
 delete[] p;
}
//-------------------------堆排序-------------------------------
void  make_max_heap(int a[],int n)
{
  if(a==NULL||n<=1) return ;
   int mid=n/2-1;
   for(int i=mid;i>=0;i--)
   {
      int j=2*i+1; int temp=a[i];
      while(j<=n)
      {
        if(j+1<=n&&a[j+1]>a[j])
         j++;
        if(a[i]>a[j])
            break;
        a[i]=a[j];
        i=j;
        j=2*i+1;
      }
     a[i]=temp;
   }
}
void heapsort(int a[],int n)
{
   make_max_heap(a,n);
   swap(a[0],a[n]);
   for(int i=n-1;i>1;i--)
   {
    make_max_heap(a,i);
    swap(a[i],a[0]);
   }
}
//---------插入排序--------------
void insert(int a[],int n)
{
 for(int i=1;i<=n;i++)
 {
    int temp=a[i];
    int j=i;
while(j>=1)
    { 
        if(temp<a[j-1])
      {
         a[j]=a[j-1];
         j--;
      }
        else
            break;
    }
   a[j]=temp;
 }
}
//------------------冒泡排序---------------------
void myswap(int &a,int &b)
{
  int c=a;
     a=b;
     b=c;
}
void buddlesort(int a[],int n)
{
  int flag=n;
  int k;
  while(flag>0)
  {  
      k=flag;
      flag=0;
    for(int i=0;i<k-1;i++)
    {
       if(a[i]>a[i+1])
       {
        myswap(a[i],a[i+1]);
        flag=i+1;
       }
    }
    
  }
}
int main()
{
    int list[10]={5,7,8,9,6,4,15,2,35,56};
  //for(int i=10;i>0;i--)
  //{
  //   list[i-1]=11-i;
  //}
   print(list,9);
  //quicksort(list,9);
   //mergersort(list,9);
  // heapsort(list,9);
  // insert(list,9);
   buddlesort(list,9);
   print(list,9);
   system("pause");
   return 0;
}