c语言快速排序,请教网游之大神请赐教for (;i<j;j--) if(a[j]<key) a[i]=a[

C语言几种排序算法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言几种排序算法
上传于||文档简介
&&C&#8203;语&#8203;言&#8203;常&#8203;见&#8203;的&#8203;几&#8203;种&#8203;排&#8203;序&#8203;算&#8203;法&#8203;,&#8203;含&#8203;源&#8203;程&#8203;序&#8203;及&#8203;算&#8203;法&#8203;说&#8203;明&#8203;。
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢请教关于 c语言快速排序,我的程序哪错了?_百度知道
请教关于 c语言快速排序,我的程序哪错了?
看了c语言的书后,自己写了个快排,但不知道哪里错了,运行不出结果。请大家帮帮忙~~我的程序:#include&stdlib.h&#include&time.h&main(){int kuai(int a[],int low,int high);int sheng(int a[],int n);int print(int a[],int n);int a[10];int i,j;sheng(a,10);print(a,10);kuai(a,0,9);print(a,10);system(&pause&);}int sheng(int a[],int n){srand((unsigned long)time(0));for(i=0;i&n;i++) { a[i]=(float)rand()*100&#47;RAND_MAX; }}int print(int a[],int n){for(i=0;i&n;i++) { printf(&%d &,a[i]); } printf(&&#92;n&);}int kuai(int a[],int low,int high){int i=low,j=high,pivot=a[low],t;if(low&=high) return 1;while(i&j) { while(a[i]&=pivot&&i&j) i++; while(a[j]&=pivot&&i&j) 哗笭糕蝗蕹豪革通宫坤j--; if(i&j) {t=a[i]; a[i]=a[j]; a[j]=t;} } a[low]=a[i]; a[i]= kuai(a,low,i-1); kuai(a,i+1,high);}
提问者采纳
你的程序有很多问题,函数类型都有错,其它问题就没看了;还有给你个建议,函数命名做到见名知义(最好不要用蹩脚的拼音)。这是我调哗笭糕蝗蕹豪革通宫坤试好的程序#include&stdlib.h&#include&stdio.h&#include&time.h&void main(){void QuickSort(int a[],int start,int end);void generate(int a[],int n);void print(int a[],int n);int a[10];generate(a,10);print(a,10);QuickSort(a,0,9);print(a,10);system(&pause&);}void generate(int a[],int n){srand((unsigned long)time(0));for(i=0;i&n;i++) { a[i]=rand()*100/RAND_MAX; }}void print(int a[],int n){for(i=0;i&n;i++) { printf(&%d &,a[i]); } printf(&&#92;n&);}void QuickSort(int a[],int start,int end){ int i,j, i= j= temp=a[start]; while(i&j) {
while(i&j && a[0]&a[j])
//从右边找到比基准值小的位置
a[i]=a[j];
//大元素左移
while(i&j && a[0]&=a[i])
//从左边找到比基准值小的位置
a[j]=a[i];
//小元素右移
} } a[i]= //最后i和j相等 if(start&i)
QuickSort(a,start,i-1); if(i&end)
QuickSort(a,i+1,end);}
提问者评价
thank you very much!!!
其他类似问题
为您推荐:
快速排序的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁for(i=1;i&n;i++){
/*if(a[j-1]!=a[i])
a_c吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:73,763贴子:
for(i=1;i&n;i++){
/*if(a[j-1]!=a[i])
n){int j=1;for(i=1;i&n;i++){if(a[j-1]==a[i]);else a[j++]=a[i];}和int
n){int j=0;//(此处为0)for(i=0;i&n;i++){if(a[j]==a[i]);else a[++j]=a[i];}}后面求的最后少了一个例如将a[]={1,1,2,2,3,4,5,5,5};结果 1,2,3,4,5但是后者5 没了?哪个大神解释下
debug模式,打短点调试。 这样自己调试找到的问题比别人告诉的会记得久一点
for循环应该从i=0开始,数组的第一个是a[0]。比如a[10]就是从a[0]到a[9]
10.让电脑替你说”IIOVEYOU”。方法:新建一个记事本,在里面输入CreateObject(&SAPI.SpVoice&).Speak&IloveYOU&保存扩展名为.VBS文件如:我爱你.vbs双击运行,电脑就会说iloveyou了,如果编好给心爱的人的话一定会让TA惊喜不已
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或c语言for(j=1;j&=9;j++) for(i=0;i&=9-j;i++) 这两句到底咋个循环?_百度知道
c语言for(j=1;j&=9;j++) for(i=0;i&=9-j;i++) 这两句到底咋个循环?
a[i+1]=t;i&i&a[i]=a[i+1];; for(j=1;i&10;%c &quot.h&;j++)
for(i=0;%c&void main(){
char a[10];n&i&10;10;n&;
for(i=0;%c&#92#include &j&=9;i++)
scanf(&i++)
printf(&);
printf(&i++)
if (a[i]&gt,i;i++)
for(i=0,a[i]);a[i+1])
t=a[i],t:&#92,a[i]),&a[i]);=9-j,j
提问者采纳
面两个循环不解释。此时j为2;=9,小于等于9,j为1;=9-j。;i&=9-2;i++)第一次执行外层循环for(j=1。循环执行次数为外层循环执行9次内层循环在外层循环第一次执行的时候执行9次;j++)
for(i=0;j&lt,第二次8次 ,此时j为1,按照这个条件执行循环。第三次7 。然后进入内层循环for(i=0。。按照这个顺序完成循环的执行,执行循环体,执行后判断循环条件仍然满足;j++),内层循环j的条件为j&=9-j;j&lt。当i==9的时候退出内层循环,如果前面你都不明白那下面的你不用看了。。。回去先看看书好了;i&lt,继续执行,所以内层循环的条件判断为i小于等于9-1;i++);=9。for(j=1。,执行外层循环第三个表达式
这两个for循环不是并列的吗?如果第二个循环是内层循环不是还需要加{}的吗?还有就是第三个外层循环 for(i=0;i&10;i++)这咋循环呢?
循环的统辖范围是下一个语句。这里它的下一个语句是for循环,而for循环语句作用域是遇到分号或者花括号。花括号只是用来限定作用域的。所以这两个循环不是并列,是一个内外级关系。
提问者评价
谢谢你帮我大忙了
其他类似问题
为您推荐:
其他1条回答
for(i=0;i++)。
表述的有点不明;i&前面循环9次;j&ltfor(j=1;=9-j,你慢慢理解,每循环一次后面的循环少一次;=9
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于排序遇到的问题,求解答_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:379,266贴子:
关于排序遇到的问题,求解答收藏
问题在最后一个插入排序,怎么修改才能融入整个程序呢?楼下放代码
#include&stdio.h&
#include&stdlib.h&
typedef struct
node r[20];
void print(node a[],int n);
int creat();
void shell(node a[],int n);
void quick1(node a[],int l,int h);
void stinsort(node a[],int n);
int hoare(node a[],int l,int h);
int main()
int yx(int m,int i);
int radixsort(node a[],int n);
int num,l,h,c;
while (c!=0)
printf(&1.输入关键字,以-9999表示结束\n&);
printf(&2.希尔排序\n&);
printf(&3.快速排序\n&);
printf(&4. 插入排序\n&);
printf(&输入选择1-4,0表示结束\n&);
scanf(&%d&,&c);
case 1:num=creat(); printf(&记录中的原始数据如下:\n&);
print(r,num);
case 2:shell(r,num); print(r,num);
case 3:l=0; h=num-1; quick1(r,l,h); print(r,num);
case 4: stinsort(r,num); print(r,num);
//main end
void print(node a[],int n)
for (i=0;i&n;i++)
printf(&%5d&,a[i].key);
printf(&\n&);
int creat()
printf(&input keys:&);
scanf(&%d&,&i);
while (i!=-9999)
r[n].key=i; n++;
printf(&input keys:&);
scanf(&%d&,&i);
return (n);
void shell(node a[],int n)
int i,j,k;
for(i=n;i&=1;i--) a[i].key=a[i-1].
while (k&=1)
for(i=k+1;i&=n;i++) {a[0].key=a[i]. j=i-k;
while((a[j].key&a[0].key)&&(j&=0))
a[j+k].key=a[j]. j=j-k;
a[j+k]=a[0];
for (i=0;i&n;i++) a[i].key=a[i+1].
printf(&输出希尔排序的结果&);
int hoare(node a[],int l,int h)
i=l; j=h; x.key=a[i].
while((i&j)&&(a[j].key&=x.key)) j--;
if(i&j) {a[i].key=a[j]. i++;}
while((i&j)&&(a[i].key&=x.key)) i++;
if(i&j) {a[j].key=a[i]. j--;}
}while (i&j);
a[i].key=x. return(i);
void quick1(node a[],int l,int h)
i=hoare(a,l,h);
quick1(a,l,i-1);
quick1(a,i+1,h);
void stinsort(node a[],int n)
for(i=2;i&=n;i++)
a[0]=a[i];
while (a[j].key&a[0].key) {a[j+1]=a[j]; j--;}
a[j+1]=a[0];
最后一个插入排序好像是要 把原来的数组重新放到一个新的从b【1】开始的数组里面,但是具体要怎么操作,我不清楚啊。
对于 带 .key
的有点晕。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 请教大神这是什么歌 的文章

 

随机推荐