| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 968 人关注过本帖
标题:求助啊!我的作业,死也找不出错,谁来救我。。。
只看楼主 加入收藏
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
 问题点数:0 回复次数:12 
求助啊!我的作业,死也找不出错,谁来救我。。。

是让用递归编的快速排序,用的是vc的helloword,大家帮帮我,明天就要交了。。。

// 5_24.cpp : Defines the entry point for the console application.
//快速排序

#include "stdafx.h"
#include <iostream.h>
#include <conio.h>

void partition(int [],int,int);
void quickSort(int [],int,int);

int xiao;

int main()
{
const int geshu=10;
int a[geshu]={110,2,3,6,4,5,7,8,10,9};

cout<<"Ten numbers is:"<<endl;

for(int i=0;i<geshu;i++)
cout<<a[i]<<" ";
cout<<endl;

quickSort(a,0,geshu-1);

for(int g=0;g<geshu;g++)
cout<<a[g]<<" ";
cout<<endl;

getch();
return 0;
}

void partition(int x[],int low,int high)
{
int middle1,middle2,cishu,shi;

do
{
cishu=0;
shi=0;
if(cishu==0)
{
for(int j=high;j>low;j--)
{ //第一个数和最后的比较,如果有比它小的就和它换位置
if(x[low]>x[j])
{
middle1=x[low];
x[low]=x[j];
x[j]=middle1;
cishu=1;
xiao=j;
high=j;
shi=1;
break;
} //当有了一次换位后跳出
}
}
else
{
for(int m=low;m<high;m++)
{ //再把那个数和它前面的比较,如果有比它大的,就换位置
if(x[high]<x[m])
{
middle2=x[high];
x[high]=x[m];
x[m]=middle2;
cishu=0;
xiao=m;
low=m;
shi=1;
break;
} //当有了一次换位后跳出
}
}
}while(shi==1); //只要还有换位就继续
}

void quickSort(int z[],int star,int end){

if(star<end)
{
partition(z,star,end);
quickSort(z,star,xiao-1);
quickSort(z,xiao+1,end);
}
}

搜索更多相关主题的帖子: 作业 
2005-11-22 14:37
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
是递归的折分法查找算法吗?我以前发过就是在这个版的,你可以找找.

=×&D o I p R e E n C g T l X&×=
2005-11-22 14:47
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
得分:0 
我只是想要知道我的怎么错了。。。
2005-11-22 23:41
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
得分:0 
而且,这不是折半查找。。。
2005-11-22 23:44
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 

#include <iostream.h>
#include <conio.h>

void partition(int [],int,int);
void quickSort(int [],int,int);

int xiao;

int main()
{
const int geshu=10;
int a[geshu]={110,2,3,6,4,5,7,8,10,9};

cout<<"Ten numbers is:"<<endl;

for(int i=0;i<geshu;i++)
cout<<a[i]<<" ";
cout<<endl;

quickSort(a,0,geshu-1);

for(int g=0;g<geshu;g++)
cout<<a[g]<<" ";
cout<<endl;

getch();
return 0;
}

void partition(int x[],int low,int high)
{
int middle;
do
{
for(int j=high;j>low;j--)
{ //第一个数和最后的比较,如果有比它小的就和它换位置
if(x[low]>x[j])
{
middle=x[low];
x[low]=x[j];
x[j]=middle;
} //当有了一次换位后跳出
}
low+=1;
}while(low<high); //只要还有换位就继续
}

void quickSort(int z[],int star,int end){

if(star<end)
{
partition(z,star,end);
//quickSort(z,star,xiao-1);
//quickSort(z,xiao+1,end);
}
}


=×&D o I p R e E n C g T l X&×=
2005-11-23 09:19
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
得分:0 

这样改过之后,好象就不是递归了吧?
你能告诉我,我原来的是怎么错了吗?因为我一直找不到我的错,所以特郁闷,总觉得自己的没错啊。。。

2005-11-23 23:19
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
你那叫递归吗!简直是唬人!
这里当没有换位j的值就不会加.
for(int j=high;j>low;j--)
{ //第一个数和最后的比较,如果有比它小的就和它换位置
if(x[low]>x[j])
{
middle1=x[low];
x[low]=x[j];
x[j]=middle1;
cishu=1;
xiao=j;
high=j;
shi=1;
break;
} //当有了一次换位后跳出
}
}

还有这里,完了上面的,high与low的值差多少??你想一想吧!
else
{
for(int m=low;m<high;m++)
{ //再把那个数和它前面的比较,如果有比它大的,就换位置
if(x[high]<x[m])
{
middle2=x[high];
x[high]=x[m];
x[m]=middle2;
cishu=0;
xiao=m;
low=m;
shi=1;
break;
} //当有了一次换位后跳出
}
}

=×&D o I p R e E n C g T l X&×=
2005-11-23 23:29
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
得分:0 
而且,你这个好象是变成了冒泡排序了把?
我把题写出来好了。
快速排序的递归排序方法:
1。分区:取未排数组的第一个元素,确定其最终位置(左边都比它小,右边都比它大),这样就有了两个未排数组。
2。递归:对每个未排数组进行第一步。
如何确定最终位置呢?把第一个元素从最右开始比较,有比它小的就换位,再从最左比,有大就换位,反复直至到最终位置。
用一个递归函数调用分区函数。
2005-11-23 23:35
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
这样不就清楚了.我帮你搞定它,不过已很晚了,明天帮你做.

=×&D o I p R e E n C g T l X&×=
2005-11-24 00:05
Isable
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-22
收藏
得分:0 

ありがとう!

2005-11-24 00:16
快速回复:求助啊!我的作业,死也找不出错,谁来救我。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067722 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved