// 排序算法的实现.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);
}
}
浙公网安备 33010602011771号