LZ的作品问题真的挺多的,还需要加油啊!
帮你优化了一下代码,希望对你有帮助
#include "stdio.h"
#include "stdlib.h"
#define N 20
//void QSort(c[N],int low,int high){ 少了数组类型说明
void QSort(int c[N],int low,int high){
int k;
if(low
//QSort(c[N],low,k-1); 同上
//QSort(c[N],k+1,high); 同上
//return c[N/2+1]; 函数类型是void,不需要返回值
k=Partition(c,low,high);
QSort(c,low,k-1);
QSort(c,k+1,high);
}
}
/***我测试网上的这个写法有点问题,因此,优化了一下
//int Partition(c[N],int low,int high){ 少了数组类型说明
int Partition(int c[N],int low,int high){
int k=c[low]; //总是把最低位作为Key来比较
c[0]=c[low];
//k=c[low].key; 哪里学来的这种用法???
while(low
while(low
c[low]=c[high];
//while(low
}
c[low]=c[0];
return low;
}
*****/
int Partition(int l[],int low,int high)
{
#define SWAP_AB(a,b) {int c=(b);(b)=(a);(a)=c;}
int prvotkey=l[low];
unsigned char flag=1;
while (low
if ( flag )
{
while (low
--high;
}
else
{
while (low
}
if ( low >= high )
break;
SWAP_AB( l[low] , l[high] )
flag = !flag ;
}
return low;
}
void main()
{
int s1,s2,s,x,y;
int i,j;
//int a[N],b[N];
//没有数据,程序干什么?
int a[N]={21,2,30,14,35,76,87,81,90,101,11,123,103,174,165,16,179,108,219,201};
int b[N]={21,2,30,14,35,76,87,81,90,101,11,123,103,174,165,16,179,108,219,201};
//x=QSort(a[N],a[0],a[N-1]);
//y=QSort(b[N],b[0],b[N-1]);
QSort(a,0,N-1); //快速排序参数传递的是数组,低位标识位,高位标识位,不是元素值
QSort(b,0,N-1); //排序完成后,是数组的数据顺序变了,不会有返回值
//输出排序完的数组
for( i=0;i
printf("\n" );
s1=0;
s2=0;//使用前要置初值0
//看你的意思是想取排序后中间后一位那个数吧
x=a[N/2+1];
y=b[N/2+1];
printf("x=%d\n",x );
printf("y=%d\n",y );
getchar();
//没看懂你下面这些要做些什么,呵呵
for( i=0;i
for( j=0;j
//s1+=abs(b[i]-(x+i));这里应该是s2 和 j 吧
s=s1+s2;
printf("s=%d\n",s );//输出结果到屏幕
getchar();
return(s); //你这个s返回给操作系统吗?
}
那个
1 函数参数:c[N] 没有类型
void QSort(c[N],int low,int high)
Partition也是。
看函数体里的调用,c应该是一个结构体的数组,前面应该有个struct定义吧。要把那个完整的拷贝到上面。并且把类型名加上。比如:
struct node
{
int key;
int value;
};
void QSort(node c[N],int low,int high) {
//...
下面main函数调用时,也要用struct数组而不是int数组当参数。
2 QSort调用了Partition,所以Partition应该在QSort之前声明。
最简单的修改方法可以把Partition的定义块写到QSort之前
3 一些临时变量没有类型,C++不像VB或者一些脚本,所有的变量声明的时候都需要有类型的。根据编译错误逐个修改吧。
您好 这些代码是您摘下来的吗?少了很多定义。。。。。。
你这个程序完全没法看啊同学,你先回去看看函数声明、数组以及指针部分把(天啊,整个c也就这么几个部分了),照着例子谢个小程序先,别写这么长,还是个递归这么高级的函数。我要吐血了,完全看不懂你在做什么。
看了一下,几个基本的问题:
1.line 4:void QSort(c[N],int low,int high) 这里的c[N]是变量,我们应该用int* c,这个才是声明。
既然你的函数是void类型的,你怎么能在最后return c[N/2+1];呢。应该是
int Qsort(int* c,int low,int high)
2.line 16:k=c[low].key; 这个c[low]是int类型的,不是struct,你也没有声明,不知道你这个.key是做什么的。
3.这个是一个c程序,你的main函数可以有return,可是return有参数是给谁的~~
Intel I5 2300 4核 单核能力比AMD强很多 ¥1080
微星H61 E33 550
金士顿4G DDR3 1333 230
希捷500G 260
索泰(zotac)GTS450-1GD5 F1 PA 875/4000 1024M/128bit GDDR5 PCI-E 显卡 ¥730
航嘉H507 150
台达电源 Smart400 主动式 240
LED AOC e2343F(LED屏) 23寸刀锋液晶 1050
4300块 如果CPU换I3 2100 ¥800 可以便宜200多