CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

高分求程序:编写一个排序程序,用任意三种排序算法,要用1个主函数调用3个算法函数

楼主jeffchang(风萧寒)2003-09-04 20:32:08 在 VC/MFC / 基础类 提问

请帮忙做一下,排序的数字可以已知,也可以设定能更改 问题点数: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

相关问题

  • %%%%%%%%%%%% stl 算法 for_each() 调用类成员函数失败,请执教
  • 函数调用
  • 函数调用
  • 调用函数
  • 函数调用
  • 函数调用
  • 函数调用?
  • 排序函数
  • 求三点画圆弧算法--不能调用现成的画圆弧函数
  • 函数调用函数

关键词

  • pf
  • num
  • include

得分解答快速导航

  • 帖主:jeffchang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo