打电话给qsort [英] calling qsort

查看:77
本文介绍了打电话给qsort的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

K& R有三个不同版本的qsort,最终的一个应该是

就像std库中的那个。我正在尝试实现第一个,

,这是§4.10。


我认为我非常接近这个:


void qsort(int v [],int left,int right)

{


int i,last;

void swap(int v [],int i,int j);


if(left> = right)

返回;

swap(v,left,(left + right)/ 2);

last = left;

for(i = left + 1; i< = right; i ++)

if(v [i]< v [left])

swap(v,++ last,i);

swap(v,left,last);

qsort(v,left,last - 1);

qsort(v,last + 1,右);


}


void swap(int v [],int i,int j)

{

int temp;


temp = v [i];

v [i] = v [j];

v [j] = temp;

}


#include< stdio.h>

#define size 9

int main(无效)

{

int m [size],i;


for(i = 0; i< ;尺寸; ++ i)

{

m [i] = i - 尺寸;

printf(" %d \ n",m [i]);

}


qsort(m [],0,size - 1);
= i; i< size; ++ i)printf("%d \ n",m [i]);

返回0;

}


// gcc -o sort c5.c


gcc对象:


F:\ gfortran \source> gcc -o sort c5.c

c5.c:在函数''main'中':

c5.c:42:错误:''之前的预期表达'''令牌


如果我算得正确,这就是qsort调用。我对gcc

对象并不感到惊讶,因为我根本不确定这种语法。


我想这是个问题一。另一个是如何调用stdlib版本

的qsort,其语法在appdx B5中给出:


void qsort(void * base,size_t n, size_t size,

int(* cmp)(const void *,const void *)


新墨西哥州美丽的夜晚。我能闻到甚至闻到国家

公平。欢呼,

-

我们现在就在这里。除此之外,所有人类知识都是如此/>
月光.3

HL Mencken

解决方案

嗨Ron,

做了一些改动而且工作正常。:)


<更改


你的



diff qsort_samp.c original_qsort.c

1 ,3d0

< #include< stdio.h>

< #define size 9

<

32a30,32


#include< stdio.h>

#define size 9



39c39

< m [i] = size - i;

---


m [i] = i - size;



43c43

< qsort(m,0,size - 1);

---


qsort(m [],0,size - 1) ;



问候,

Dhilip


9月9日06:30, Ron Ford< r ... @ example.invalidwrote:


K& R有三个不同版本的qsort,最终的一个应该是

就像std库中的那个。



请注意,呼叫交互可能类似,但胆量不是
必须是。 qsort()不必实现快速排序。


*我正在尝试实现第一个,

这是§4.10。



我不明白试图实施。为什么不复制代码

提供。


我觉得我很接近这个:


void qsort(int v [],int left,int right)

{


* int i,last;

* void swap(int v [],int i,int j);


* if(left> = right)

* *返回;

* swap(v,左,(左+右)/ 2);

* last = left;

* for(i = left + 1; i< = right; i ++)

* * if(v [i]< v [left])

* * * swap(v,++ last,i);

* * swap(v,left,last);

* * qsort(v,left,last - 1 );

* * qsort(v,last + 1,right);


}


无效交换(int v [],int i,int j)

{

* int temp;


* temp = v [我];

* v [i] = v [j];

* v [j] = temp;


} *



看起来与K& R相同(除了你删除了评论)


#include< stdio.h>

#define size 9


int main(void)

{

* int m [size],i;


* for(i = 0;我<尺寸; ++ i)

* * {

* * * * m [i] = i - size;

* * * * printf( "%d \ n",m [i]);

* *}


* qsort(m [],0,size - 1);



去重新读取数组。例如K& R第29页


>

* for(i = 0; i< size; ++ i)* printf("%d \ n",m [i]);


*返回0;


}


// gcc -o sort c5.c


gcc对象:


F :\ gfortran \source> gcc -o sort c5.c

c5.c:在函数''main''中:

c5.c:42:错误:'''''之前的预期表达式


如果我算得正确,这就是qsort调用。 *我对gcc

对象并不感到惊讶,因为我根本不确定这个语法。



好​​。因为它错了


我猜这是问题一。 *另一个是如何调用stdlib版本

的qsort,其语法在appdx B5中给出:


void qsort(void * base,size_t n ,size_t size,

* * * * * * int(* cmp)(const void *,const void *)


新墨西哥州美丽的夜晚。*我能听到甚至闻到这个状态

公平。*欢呼,



在Xshire的早晨可怕的早晨。它正在促成它下来了。

-

尼克基格利


C ++:通过将额外的腿钉在狗身上制成的章鱼

- Steve Taylor,1998


2008年9月9日星期二01:14:50 -0700(PDT), s。*********** @ gmail.com
< blockquote class =post_quotes>
嗨Ron,


做了一些改动而且工作正常。:)


<更改


>你的



diff qsort_samp.c original_qsort.c

1,3d0

< #include< stdio.h>

< #define size 9

<

32a30,32


> #include< stdio.h> ;
#define size 9



39c39

< m [i] = size - i;

---


> m [i] = i - 大小;



43c43

< qsort(m,0,size - 1);

---


> qsort(m [],0,size - 1);




问候,

Dhilip



感谢您的支持回应,菲尔。在qsort中删除大括号

调用并在填充m时反转i和大小给出输出我是

寻找:

F:\ gfortran \source>排序

9

8

7

6

5

4

3

2

1

1

2

3

4

5

6

7

8

9

-

我们现在就在这里。除此之外,所有人类的知识都是月亮。 3

H. L. Mencken


K&R has three different versions of qsort, and the ultimate one is supposed
to be like the one in the std library. I''m trying to implement the first,
which is in §4.10.

I think I''m pretty close with this:

void qsort(int v[], int left, int right)
{

int i, last;
void swap(int v[], int i, int j);

if (left >= right)
return;
swap (v, left, (left + right)/2);
last = left;
for (i = left+ 1; i <= right; i++)
if (v[i] < v[left])
swap (v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);

}

void swap(int v[], int i, int j)
{
int temp;

temp = v[i];
v[i] = v[j];
v[j] = temp;
}

#include <stdio.h>
#define size 9

int main(void)
{
int m[size], i;

for (i=0; i < size; ++ i)
{
m[i] = i - size;
printf(" %d \n ", m[i]);
}

qsort (m[], 0, size - 1);

for (i=0; i < size; ++ i) printf(" %d \n ", m[i]);

return 0;
}

// gcc -o sort c5.c

gcc objects with:

F:\gfortran\source>gcc -o sort c5.c
c5.c: In function ''main'':
c5.c:42: error: expected expression before '']'' token

If I count correctly, this is the qsort call. I''m not surprised that gcc
objects, as I''m not sure about this syntax at all.

I guess that''s question one. The other is how to call the stdlib version
of qsort, whose syntax is given in appdx B5:

void qsort(void *base, size_t n, size_t size,
int (*cmp)(const void *, const void *)

Beautiful night here in New Mexico. I can hear and even smell the state
fair. cheers,
--
We are here and it is now. Further than that, all human knowledge is
moonshine. 3
H. L. Mencken

解决方案

Hi Ron,

made few changes and it worked. :)

< changes

Yours

diff qsort_samp.c original_qsort.c
1,3d0
< #include <stdio.h>
< #define size 9
<
32a30,32

#include <stdio.h>
#define size 9

39c39
< m[i] = size - i;
---

m[i] = i - size;

43c43
< qsort (m, 0, size - 1);
---

qsort (m[], 0, size - 1);


Regards,
Dhilip


On 9 Sep, 06:30, Ron Ford <r...@example.invalidwrote:

K&R has three different versions of qsort, and the ultimate one is supposed
to be like the one in the std library.

note the calling interafec may be similar but the guts don''t
have to be. qsort() does not have to implement Quick Sort.

*I''m trying to implement the first,
which is in §4.10.

I don''t understand "trying to implement". Why not copy the code
provided.

I think I''m pretty close with this:

void qsort(int v[], int left, int right)
{

* int i, last;
* void swap(int v[], int i, int j);

* if (left >= right)
* * return;
* swap (v, left, (left + right)/2);
* last = left;
* for (i = left+ 1; i <= right; i++)
* * if (v[i] < v[left])
* * * swap (v, ++last, i);
* * swap(v, left, last);
* * qsort(v, left, last - 1);
* * qsort(v, last + 1, right);

}

void swap(int v[], int i, int j)
{
* int temp;

* temp = v[i];
* v[i] = v[j];
* v[j] = temp;

} *

that looks identical to K&R (except you stripped the comments)

#include <stdio.h>
#define size 9

int main(void)
{
* int m[size], i;

* for (i=0; i < size; ++ i)
* * {
* * * * m[i] = i - size;
* * * * printf(" %d \n ", m[i]);
* * }

* qsort (m[], 0, size - 1);

go and reread about arrays. eg K&R page 29

>
* for (i=0; i < size; ++ i) *printf(" %d \n ", m[i]);

* return 0;

}

// gcc -o sort c5.c

gcc objects with:

F:\gfortran\source>gcc -o sort c5.c
c5.c: In function ''main'':
c5.c:42: error: expected expression before '']'' token

If I count correctly, this is the qsort call. *I''m not surprised that gcc
objects, as I''m not sure about this syntax at all.

good. because it''s wrong

I guess that''s question one. *The other is how to call the stdlib version
of qsort, whose syntax is given in appdx B5:

void qsort(void *base, size_t n, size_t size,
* * * * * *int (*cmp)(const void *, const void *)

Beautiful night here in New Mexico. *I can hear and even smell the state
fair. *cheers,

horrid morning here in Xshire. It''s precipitating it down.
--
Nick Keighley

C++: "an octopus made by nailing extra legs onto a dog"
-- Steve Taylor, 1998


On Tue, 9 Sep 2008 01:14:50 -0700 (PDT), s.***********@gmail.com posted:

Hi Ron,

made few changes and it worked. :)

< changes

>Yours


diff qsort_samp.c original_qsort.c
1,3d0
< #include <stdio.h>
< #define size 9
<
32a30,32

>#include <stdio.h>
#define size 9

39c39
< m[i] = size - i;
---

> m[i] = i - size;

43c43
< qsort (m, 0, size - 1);
---

> qsort (m[], 0, size - 1);



Regards,
Dhilip

Thanks for your response, Phil. Removing the braces from m in the qsort
call and reversing i and size while populating m gives me the output I was
looking for:
F:\gfortran\source>sort
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
--
We are here and it is now. Further than that, all human knowledge is
moonshine. 3
H. L. Mencken


这篇关于打电话给qsort的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆