永发信息网

那位大哥帮忙给个计算机软件一快速排列程序(程序要注释)用C语言编写,谢谢

答案:1  悬赏:30  手机版
解决时间 2021-08-01 06:40

那位大哥帮忙给个计算机软件一快速排列程序(程序要注释)用C语言编写,谢谢!急需

最佳答案

#include"stdio.h"
#include"stdlib.h"
#include "string.h"
#define Max 100 //假设文件长度
typedef struct{ //定义记录类型
int key; //关键字项
}RecType;
typedef RecType SeqList[Max+1]; //SeqList为顺序表,表中第0个元素作为哨兵
int n; //顺序表实际的长度



//3、 快速排序的基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录作为支点(又称基准记录)(pivot),将所有关键字比它小的记录放置在它的位置之前,将所有关键字比它大的记录放置在它的位置之后(称之为一次划分过程)。之后对所分的两部分分别重复上述过程,直到每部分只有一个记录为止。
//1.========一次划分函数=====
int Partition(SeqList R,int i,int j)
{ // 对R[i‥j]做一次划分,并返回基准记录的位置
RecType pivot=R[i]; //用第一个记录作为基准
while(i<j) { //从区间两端交替向中间扫描,直到i=j
while(i<j &&R[j].key>=pivot.key) //基准记录pivot相当与在位置i上
j--; //从右向左扫描,查找第一个关键字小于pivot.key的记录R[j]
if(i<j) //若找到的R[j].key < pivot.key,则
R[i++]=R[j]; //交换R[i]和R[j],交换后i指针加1
while(i<j &&R[i].key<=pivot.key) //基准记录pivot相当与在位置j上
i++; //从左向右扫描,查找第一个关键字小于pivot.key的记录R[i]
if(i<j) //若找到的R[i].key > pivot.key,则
R[j--]=R[i]; //交换R[i]和R[j],交换后j指针减1
}
R[i]=pivot; //此时,i=j,基准记录已被最后定位
return i; //返回基准记录的位置
}
//2.=====快速排序===========
void QuickSort(SeqList R,int low,int high)
{ //R[low..high]快速排序
int pivotpos; //划分后基准记录的位置
if(low<high) { //仅当区间长度大于1时才排序
pivotpos=Partition(R,low,high); //对R[low..high]做一次划分,得到基准记录的位置
QuickSort(R,low,pivotpos-1); //对左区间递归排序
QuickSort(R,pivotpos+1,high); //对右区间递归排序
}
}
//4、 直接选择排序的基本思想:第i趟排序开始时,当前有序区和无序区分别为R[1‥i-1]和R[i‥n](1≤i≤n-1),该趟排序则是从当前无序区中选择出关键字最小的记录R[k],将它与无序区的的第一个记录R[i]交换,有序区增加一个记录,使R[1‥i],和R[i+1‥n]分别为新的有序区和新的无序区。如此反复进行,直到排序完毕。
//======直接选择排序========
void SelectSort(SeqList R)
{
int i,j,k;
for(i=1;i<n;i++){ //做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=n;j++) //在当前无序区R[i‥n]中选key最小的记录R[k]
if(R[j].key<R[k].key)
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i) { // //交换R[i]和R[k]
R[0]=R[i];R[i]=R[k];R[k]=R[0];
} //endif
} //endfor
}


//==========输入顺序表========
void input_int(SeqList R)
{
int i;
printf("Please input num(int):");
scanf("%d",&n);
printf("Plase input %d integer:",n);
for(i=1;i<=n;i++)
scanf("%d",&R[i].key);
}
//==========输出顺序表========
void output_int(SeqList R)
{
int i;
for(i=1;i<=n;i++)
printf("%4d",R[i].key);
}
//==========主函数======
void main()
{
SeqList R;
input_int(R);
QuickSort(R,1,n);
printf("QuickSort reult:");
output_int(R);
printf("\n");
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我喜歡的科目是物理,英語造句
今年哈尔滨包烧费每平方米使用面积是多少?公
扬州手机号码那里有批发的
恋人爱慕语句,找形容看开心情,愿曾经的恋人幸
武陵区常德三甲医疗护理器械我想知道这个在什
揭阳在哪?
昆明哪家婚纱摄影拍摄的婚纱比较出色的??
写一首自己创作的诗歌,有什么写景物的诗歌吗
佛山市高明区西安监狱犯罪名单怎么可以查到?
可以用邮政卡买G么,急
湖滨区三门峡戈迪照明在哪里啊,我有事要去这
穿越火线怎么可以窗口化?
大桥都有一定的承载量、但当车辆多是超载怎么
记号笔怎么加墨水,怎样拿出记号笔里的海棉心
关于非主流化妆问题,请爱化非主流装的人士注
推荐资讯
“每冒风驰行,未百步辄返“中,
可以翻译一下“Dannywas just tired about th
爱了,伤了,痛了
我是帮问:请大家帮个忙,谢谢了~~~急急急!!
当你挂住一个人,是否想去到那个人的城市生活
念完台湾大学要多久 《脑筋急转弯》
武穴市黄冈半岛公寓地址在哪,我要去那里
爱到尽头会是什么样子?
平板和手机哪个实用,如果配置一样,平板电脑
国家级高新技术企业批准部门是哪个
偃师市洛阳乔丹体育地址是什么,有没有知道的
驿城区驻马店拓谷沙龙地址在哪,我要去那里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?