问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

分治算法中排序的完整代码

发布网友 发布时间:2022-04-23 09:55

我来回答

1个回答

热心网友 时间:2023-07-05 08:02

快速排序
#include<windows.h>
#include<time.h>
#include<stdio.h>

#define MAX 10

void InitData(int a[],int len)
{//随机初始化待排序数据
int i;
srand(time(NULL));
for(i=0;i<len;i++) a[i]=rand()%1000;//随机初始化待排序数据
}

void Print(int a[],int from,int to)
{//输出a[from]到a[to]范围内所有数据,并换行
int i;
for(i=0;i<from;i++) printf(" ");//控制对齐,看出解决子问题的顺序
for(i=from;i<=to;i++) printf("%4d",a[i]);
printf("\n");
}

int part(int A[ ], int from, int to)
{int i=from+1, j=to, temp;
while( i<=j){ while(i<=to && A[i]<=A[from]) i++;
while(j>=from && A[j]>A[from]) j--;
if(i<j) {temp=A[i];A[i]=A[j];A[j]=temp;} //A[j]与A[j]交换
}
temp=A[j]; A[j]=A[from]; A[from]=temp;//A[j]与A[from]交换
return j;
}

void QuickSort(int A[ ], int from, int to) //快速排序的分治思想表达
{
if(from<to){ int position=part(A, from, to);
QuickSort(A,from,position-1);
QuickSort(A, position+1, to);
}
Print(A,from,to);
}

void main(void)
{
int A[MAX];
InitData(A,MAX);
Print(A,0,MAX-1);
QuickSort(A,0,MAX-1);
getch();
}

归并排序
#include<windows.h>
#include<stdio.h>

#define MAX 17

void InitData(int a[],int len)
{int i;
for(i=0;i<len;i++) a[i]=rand()%1000;//随机初始化待排序数据
}

void Print(int a[],int from,int to)
{
int i;
for(i=0;i<from;i++) printf(" ");//控制对齐,看出解决子问题的顺序
for(i=from;i<=to;i++) printf("%4d",a[i]);
printf("\n");
}

void Merge(int A[ ], int from, int to)
{
int *t=(int *)malloc(sizeof(int)*(to-from+1));
int i=from, mid=(to+from)/2, j=mid+1,k=0;
if(from>=to) return ;
Merge (A, from, mid);
Merge (A, mid+1, to); /*递归解决2个子问题*/
while(i<=mid && j<=to)
if(A[i]<A[j]) t[k++]=A[i++];
else t[k++]=A[j++];
while(i<=mid) t[k++]=A[i++];
while(j<=to) t[k++]=A[j++];
i=from;k=0;
while(i<=to) A[i++]=t[k++];//合并两个有序子表,即分别A[from~mid],A[mid+1~to];
//if(to-from>0)
Print(A,from,to); //合并子问题之后,将其打印出来
}

void main(void)
{
int a[MAX];
InitData(a,MAX);
Print(a,0,MAX-1);
Merge(a,0,MAX-1);
getch();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 求天涯明月刀九华书画全坐标,急用 天涯明月刀OL血衣楼在哪 计算机分治法 天涯明月刀九华水榭看日出在哪 什么是分治法的合并排序? 天涯明月刀九华隐蔽成就回音谷在哪 谁能给我解释下这个快速排序,只要解释清楚立马再加50分 天涯明月刀我已经35级了,没任务做了,我该干什么? 你的这个分治法的快速排序的程序是怎么修改的,我写了同样的代码问什么就是不行。C语言新手,请多多指教 快速排序 天涯明月刀隐藏成就奇峰乱石怎么看自己去没去过 怎么利用TCGA数据库查某个基因的表达量 天涯明月刀乱石奇峰成就怎么完成 如何理解java数据结构中的快速排序方法 快速排序算法(free pascal)详解,不要源程序,时间复杂度n(logn);谢了/... 《天涯明月刀》隐藏成就奇峰乱石怎么看自己去没去过? 如何快速掌握TCGA数据库? 《天涯明月刀》乱石成就在哪些位置 快速排序的一次划分过程 按键精灵快速排序(比冒泡更快更有效率的算法)是怎么样的? 什么是分治算法? 天刀奇峰乱石成就为什么要坐标点没反应 天涯明月刀ol隐藏属性九华的在哪 可不可以帮忙找两个分别使用c语言实现分治法和减治法的例子最好能体现出这两种算法的特点。谢了。 分治法快速排序问题,写了一个简单的程序,不知道哪里出问题了,请高手修改一下,程序如下,新手. 天涯明月刀九华墨宝拜访拾取坐标 分治法-快速排序,有点小问题,帮忙修改一下,并指出错在哪了,谢了 天涯明月刀ol九华慧空禅师在哪 分治策略的典型例题 天涯明月刀怎么样才能打怪啊?我在九华跑了半天没找到一个怪 天涯明月刀九华化清寺的主线怎么完成 化清寺墙边走不过去怎么办 吃完柿子都不能吃什么 天涯明月刀ol九华绝智轩怎么做 《天涯明月刀-九华化清寺》的主线怎么完成?化清寺墙边走不过去怎么办? 4位数行李箱密码忘了怎么办? 如何找回行李箱密码? 滴滴预约单成交率怎样才能100%? 如何找回行李箱的密码 我滴滴预约单上个月成交率降下来了,中间做过10几单预约单,这个月可以... 滴滴预约单成交率,我取消了一单变成了93,怎样可以恢复到100,麻烦大神...