高分求程序:编写一个排序程序,用任意三种排序算法,要用1个主函数调用3个算法函数
请帮忙做一下,排序的数字可以已知,也可以设定能更改 问题点数:0、回复次数:7Top
1 楼huanyun(无妻徒刑)回复于 2003-09-04 20:41:16 得分 0
冒泡 选择 快速Top
2 楼longge520(longge520)回复于 2003-09-04 21:25:03 得分 0
#include <iostream.h>
#include <afxwin.h>
#define N 11
void ReadData(int *pf,int n)
{
CFile file;
file.Open("C:\\data.dat",CFile::modeRead);
file.Read(pf,n*sizeof(int));
file.Close();
}
void Print(int *pf,int n)
{
for(int i=1;i<n;i++)
cout<<pf[i]<<" ";
cout<<endl;
}
//----------------------直接插入排序InsertSort--------------------------------
void InsertSort(int *pf,int n)
{
int i,j;
for(i=2;i<n;i++){
pf[0]=pf[i];j=i-1;
while(pf[0]<pf[j]){
pf[j+1]=pf[j];
pf[j]=pf[0];
j--;
}
}
}
//-----------------------折半插入排序BInsertSort---------------------------
void BInsertSort(int *pf,int n)
{
int i,low,high,mid;
for(i=2;i<n;i++){
pf[0]=pf[i];low=1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if(pf[0]<pf[mid]) high=mid-1;
else low=mid+1;
}
for(int j=i-1;j>=high+1;j--) pf[j+1]=pf[j];
pf[high+1]=pf[0];
}
}
//------------------------Shell排序ShellSort-------------------------------
void ShellSort(int *pf,int n,int *Arrstep,int ArrL)
{
int step=1,start=0;
for(int num=0;num<ArrL;num++){
step=Arrstep[num];
for(int start=1;start<=step;start++)
for(int i=step+start;i<n;i+=step)
{
pf[0]=pf[i];
int j=i-step;
while(pf[0]<pf[j]) {pf[j+step]=pf[j];pf[j]=pf[0];j-=step;}
}
}
}
//---------------------------快速排序QuickSort-------------------------------
int Partition(int *pf,int low,int high)
{
int pivotkey=pf[low];
pf[0]=pf[low];
while(low<high)
{
while(low<high&&pf[high]>=pivotkey) high--;
pf[low]=pf[high];
while(low<high&&pf[low]<=pivotkey) low++;
pf[high]=pf[low];
}
pf[low]=pf[0];
return low;
}
void QSort(int *pf,int low,int high)
{
int pivotloc;
if(low<high)
{
pivotloc=Partition(pf,low,high);
QSort(pf,low,pivotloc-1);
QSort(pf,pivotloc+1,high);
}
}
void QuickSort(int *pf,int n)
{
QSort(pf,1,n);
}
void MSort(int *pf,int*pfres,int s,int t)
{
if(s==t) pfres[s]=pf[s];
else{
int m=(s+t)/2;
MSort(pf,p,s,m);
MSort(pf,p,m+1,t);
Merge(p,pfres,s,m,t);
}
}
void MergeSort(int *pf,int n)
{
MSort(pf,pfre,1,n);
}
else return;
if(pf[min]<pf[m])
{
int t=pf[min];pf[min]=pf[m];pf[m]=t;
CreateHeap(pf,n,min);
}
}
void main()
{
int num[N];
//////////////////////////////////
ReadData(num,N);
cout<<"直接插入排序前:"<<endl;
Print(num,N);
InsertSort(num,N);
cout<<"排序后:"<<endl;
Print(num,N);
///////////////////////////////////
ReadData(num,N);
cout<<"折半插入排序前:"<<endl;
Print(num,N);
BInsertSort(num,N);
cout<<"排序后:"<<endl;
Print(num,N);
///////////////////////////////////////
ReadData(num,N);
cout<<"Shell插入排序前:"<<endl;
Print(num,N);
int arr[]={5,3,1};
ShellSort(num,N,arr,3);
cout<<"排序后:"<<endl;
Print(num,N);
///////////////////////////////////
ReadData(num,N);
cout<<"快速排序前:"<<endl;
Print(num,N);
QuickSort(num,N-1);
cout<<"排序后:"<<endl;
Print(num,N);
///////////////////////////////////
}
Top
3 楼longge520(longge520)回复于 2003-09-04 21:30:07 得分 0
这是以前学数据结构是写的
C:\data.dat 是保存数据的文件,可以用下面的程序产生随机数
#include <iostream.h>
#include <afxwin.h>
#define N 11
void main()
{
int num[N];
srand((unsigned)time(NULL));
for(int i=1;i<N;i++)
num[i]=rand()%100;
CFile file;
file.Open("C:\\data.dat",CFile::modeCreate|CFile::modeWrite);
file.Write(num,N*sizeof(int));
file.Close();
}Top
4 楼longge520(longge520)回复于 2003-09-04 21:41:42 得分 0
sorry,make a mistake.
下面是多余的
else return;
if(pf[min]<pf[m])
{
int t=pf[min];pf[min]=pf[m];pf[m]=t;
CreateHeap(pf,n,min);
}
}
Top
5 楼awnucel(西大耻犹未雪,南京恨何时灭&抵制日货)回复于 2003-09-05 01:11:32 得分 0
冒泡 选择 快速Top
6 楼chen_pin(小品)回复于 2003-09-14 13:46:53 得分 0
Up itTop
7 楼yuanjinming(清醒看程序)回复于 2003-09-14 14:01:50 得分 0
上面的算法太好了,就是语句的错误太多,但是值得我们学习Top




