几种排序算法的代码实现Word格式文档下载.docx

上传人:b****2 文档编号:14055756 上传时间:2022-10-17 格式:DOCX 页数:4 大小:18.34KB
下载 相关 举报
几种排序算法的代码实现Word格式文档下载.docx_第1页
第1页 / 共4页
几种排序算法的代码实现Word格式文档下载.docx_第2页
第2页 / 共4页
几种排序算法的代码实现Word格式文档下载.docx_第3页
第3页 / 共4页
几种排序算法的代码实现Word格式文档下载.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

几种排序算法的代码实现Word格式文档下载.docx

《几种排序算法的代码实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《几种排序算法的代码实现Word格式文档下载.docx(4页珍藏版)》请在冰豆网上搜索。

几种排序算法的代码实现Word格式文档下载.docx

intoutputList(PSqListp);

  intshell_insert(PSqListp,int(*comp)(void*,void*),constintd);

  intshellSort(PSqListp,int(*comp)(void*,void*),constintdistance,constintt);

#endif    /*这是shell_文件的内容*/  //这是希尔排序,前面的所有排序都是逐个的将下一个元素插入前面已经排序了的列表中,这就比避免不了  //排序中一些较“大”的数据,开始时却在前面的数据会被进行大量的比较或移动。

这是随机数据的主要  //耗时的地方。

希尔排序将数据分成d组,每组的每两个相邻数据的下标之差是d。

然后对每组数据进行各自的  //排序。

因为每组数据的增量是d,所以数据的移动是每次d个位置。

如果d取得合适,这样可以很快的将每个  //数据移动到距离自己最终位置较靠近的地方。

然后将d逐渐减  小,继续排序。

  //最后当d的值为1排序结束之后,全部的数据就排序好了。

  #include#include\  intcomp(void*d1,void*d2){//比较函数  return(((PRedType)d1)->

data-((PRedType)d2)->

data);

}  intinputList(PSqListp,intlength){//输入序列    if(p==NULL)  returnP_NULL;

  //1,指针是空的  if(length>

MAXSIZE)  returnTOOBIG;

  //2,要输入的序列太多  inti=0;

  for(i=0;

i  if(scanf(K_T,&

(p->

list[i].data))!

=1)  returnNUM_ERROR;

//3,输入的数字有误  p->

length=length;

  returnOK;

  //0}  intoutputList(PSqListp){//输出序列  if(p==NULL)  returnP_NULL;

    inti=0;

  for(i=0;

ilength;

i++)  printf(K_T\  putchar(‘\\n’);

}//outputList  intshell_insert(PSqListp,int(*comp)(void*,void*),constintd){//以d为增量的一次排序  RedTypetmp;

  inti=0;

  intj;

    for(i=d;

ilength;

i++)  {  tmp=p->

list[i];

  j=i-d;

  while(j>

=i%d&

&

comp(&

tmp,&

list[j]))  p->

list[j+d]=p->

list[j];

  j-=d;

  }  p->

list[j+d]=tmp;

  }  returnOK;

}//shell_insert  intshellSort(PSqListp,int(*comp)(void*,void*),constintdistance,constintt){//希尔排序,distance数组用来给出每次排序的增量,最后一个必须为1  inti=0;

i  shell_insert(p,comp,distance[i]);

    returnOK;

}//shellSort  /*这是文件的内容*/#include#include#include#include\  intmain(intargc,char*argv){  intstatus;

  PSqListtest;

  test=(PSqList)malloc(sizeof(SqList));

  intn=0;

  printf(\请输入第一组待排序的数的个数(输入0结束循环):

\    while

(1)  {  while(scanf(\  {  puts(\输入有误!

请重新输入!

\  while(getchar()!

=‘\\n’);

  }  if(n==0)  //结束  break;

  if(status=inputList(test,n)!

=0)  {  puts(\输入的数字有误!

\  while(getchar()!

  //exit(status);

  }    intdistance[3];

    //distance一些特定的增量算法确定  for(inti=0;

i  distance[i]=(int)pow(2,3-i)-1;

    shellSort(test,comp,distance,3);

  outputList(test);

  printf(\请输入下一组待排序的数的个数(输入0结束循环):

\  }  free(test);

  return0;

}  //快速排序  /*这是quick_文件*/#ifndefquick_sort  #definequick_sort  #defineMAXSIZE100typedefintKeyType;

    #defineK_T\  //用于输入输出如printf(K_T,p->

  intquickSort(PSqListp,int(*comp)(void*,void*));

  #endif  /*这是quick_文件*/#include\#include  intinputList(PSqListp,intlength){//输入序列    if(p==NULL)  returnP_NULL;

i++)  printf(K_T\

  

      putchar(‘\\n’);

}//outputList  staticintpartition(PSqListp,int(*comp)(void*,void*),intlow,inthigh)  {//交换顺序表[low...high]记录,枢轴记录到位,并返回其值,此时在它之前的记录不大于它,在它之后的记录不小于它    RedTypetmp=p->

list[low];

  //用于存储中轴  while(low  while(lowlist[high]),&

(tmp))>

=0)  high--;

  p->

list[low]=p->

list[high];

  while(lowlist[low]),&

(tmp))  p->

list[high]=p->

  }  p->

list[low]=tmp;

  returnlow;

}//partition  staticintQSort(PSqListp,int(*comp)(void*,void*),intlow,inthigh){//对顺序表p的子序列list[low,high]进行排序  if(low>

=high)  return0;

  intpivotloc=0;

  pivotloc=partition(p,comp,low,high);

  QSort(p,comp,low,pivotloc-1);

  QSort(p,comp,pivotloc+1,high);

}//QSort  intquickSort(PSqListp,int(*comp)(void*,void*)){//对表p进行快速排序  QSort(p,comp,0,p->

length-1);

}//quickSort    /*这是文件*/#include#include#include\  intcomp(void*d1,void*d2);

  intmain(intargc,char*argv){  intstatus;

\  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1