排序算法

#include<iostream>//本次排序只针对整型数组有效
#include<stdlib.h>
using namespace std;
const DefaultSize=50;//定义数组的大小

void BubbleSort(int V[],int n)//冒泡排序算法
{
     bool exchange;
  int i,j;
  for(i=1;i<n;i++)
  {
      exchange=false;//交换标志
   for(j=n-1;j>=i;j--)
    if(V[j-1]>V[j])
    {
        int temp=V[j-1];
     V[j-1]=V[j];
     V[j]=temp;
     exchange=true;
    }
    if(exchange==false)
     return ;//无逆序返回
  }
};

void InsertSort(int L[],const int left,const int right)//直接插入排序
{//依次将元素插入到有序表中
   int temp;
   int i,j;
   for(i=left+1;i<=right;i++)
       if(L[i]<L[i-1])
    {
        temp=L[i];
     j=i-1;
     do{
      L[j+1]=L[j];
      j--;
     }while(j>=left&&temp<L[j]);
     L[j+1]=temp;
    }
}

int Partition(int *L,const int low,const int high)
{
    int pivotpos=low;
 int pivot=L[low];
 for(int i=low+1;i<=high;i++)
      if(L[i]<pivot)
   {
       pivotpos++;
    if(pivotpos!=i)
    {
     int T;
     T=L[pivotpos];
     L[pivotpos]=L[i];
     L[i]=T;
    }
   }
   L[low]=L[pivotpos];
   L[pivotpos]=pivot;
   return pivotpos;
} ;

void QuickSort(int *L,const int left,const int right)//快速排序
{
     if(left<right)
  {
      int pivotpos=Partition(L,left,right);
   QuickSort(L,left,pivotpos-1);
   QuickSort(L,pivotpos+1,right);
  }
};

void SelectSort(int L[],const int left,const int right)//直接选择排序
{
       for(int i=left;i<right;i++)
    {
         int k=i;
   for(int j=i+1;j<right;j++)
   {
       if(L[j]<L[k])
     k=j;
   }
            if(k!=i)
   {
       int T=L[i];
    L[i]=L[k];
    L[k]=T;
   }
    }
};

void Output(int L[],int n)
{
   for(int i=0;i<n;i++)
     cout<<L[i]<<"  ";
   cout<<endl<<endl;
};

void main()
{
      int choice=0;
      int L[DefaultSize];
   int n;//实际数组的大小
   cout<<"请输入排序数的个数:"<<endl;
   cin>>n;
   for(int i=1;i<=n;i++)
   {
         cout<<"请输入第"<<i<<"个数字:";
         cin>>L[i-1];
   }
   while(choice!=5)
   {
        cout<<"排序方式:"<<endl;
     cout<<"1、冒泡排序;"<<endl;
        cout<<"2、直接插入排序;"<<endl;
     cout<<"3、快速排序;"<<endl;
     cout<<"4、直接选择排序;"<<endl;
     cout<<"5、退出。"<<endl;
     cout<<"您的选项:";
     cin>>choice;
     switch(choice)
     {
     case 1:BubbleSort(L,n-1);Output(L,n);exit(1);
     case 2:InsertSort(L,0,n-1);Output(L,n);exit(1);
     case 3:QuickSort(L,0,n-1);Output(L,n);exit(1);
     case 4:SelectSort(L,0,n);Output(L,n);exit(1);
     }
   }
}
/*四种不同的算法集合
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值