// 排序算法的实现.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"iostream"
#include"time.h"
#include"stdlib.h"
#include"string.h"
using namespace std;
typedef struct{
 int key;
 //char data[5];
}DataType;
//--------------希尔排序函数---------------//
void Shell_Sort(DataType R[],int n,int d[],int t);
void Shell_Insert(DataType R[],int dk,int n);
//--------------快速排序函数---------------//
void Quick_Sort(DataType R[],int s,int t);
int Partition(DataType R[],int i,int j);
void Quick(DataType R[],int n);
//-------------产生随机数------------------//
void CreateNUM(DataType R[],int n){
 int i;
   srand( (unsigned)time( NULL ) ); 
   for( i = 1;i <=n;i++ ){
    R[i].key=rand()%100;
    //cout<<"请输入 "<< i<<"信息:"<<endl;
    //cin>>R[i].data;
   }
   cout<<"产生的随机数为:"<<endl;
 for(int i=1;i<=10;i++)
  cout<<R[i].key<<" ";
 cout<<endl;
 }
//------------打印数值--------------------//
void Display(DataType R[],int n){
 for(int i=1;i<=n;i++)
  cout<<R[i].key<<" ";
 cout<<endl;
 
}
void SHELL(){
 int dk[3]={5,3,1};
 DataType Shell[11];
CreateNUM(Shell,11);
Shell_Sort(Shell,10,dk,3);
cout<<"希尔排序:"<<endl;
 Display(Shell,10);
 delete[]Shell;
}
void QUICK(){
 DataType Quick[11];
 CreateNUM(Quick,11); 
 Quick_Sort(Quick,1,10); 
 cout<<"快速排序:"<<endl;
 Display(Quick,10);
 delete[]Quick;
}
//===================主函数================//
int main(int argc, _TCHAR* argv[])

 int i;cout<<"输入1.进行希尔排序。2.进行快速排序。"<<endl;
 cin>>i; 
 do{
  if(i==1)
      SHELL();
    if(i==2)
   QUICK();
 
 }while(i!=3); 
 return 1;

 void Shell_Insert(DataType R[],int dk,int n){
  int i,j;cout<<"此时dk="<<dk<<endl;
  for(i=dk+1;i<=n;i++)
  {R[0]=R[i];  
  for(j=i-dk;j>0&&R[0].key<R[j].key;j=j-dk)
   R[j+dk]=R[j];
  R[j+dk]=R[0];
  }cout<<"此时排序为:"<<endl;
  Display(R,10);
 }
 void Shell_Sort(DataType R[],int n,int d[],int t){
   for(int k=0;k<t;k++)
    Shell_Insert(R,d[k],n);
  }
 int Partition(DataType R[],int i,int j){
  R[0]=R[i];cout<<"R[0]的数值为:"<<R[0].key<<endl;
  while(i<j){
   while(i<j&&R[j].key>=R[0].key)
    j--;
   if(i<j){
    R[i]=R[j];
    i++;}
   while(i<j&&R[i].key<R[0].key)
    i++;
   if(i<j){
    R[j]=R[i];
    j--;}
  }
  R[i]=R[0];
  return i;
 }
 void Quick_Sort(DataType R[],int s,int t){
  int i,j;
  if(s<t)
  {i=Partition(R,s,t);
  j=i;
  cout<<"正在对第"<<j<<"个位置进行快速排序。"<<endl;Display(R,10);
  Quick_Sort(R,s,i-1);
  Quick_Sort(R,i+1,t);
  }
 }