完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
4 条评论
|
|
|
|
1 条评论
|
|
本帖最后由 lm12041204a 于 2019-11-27 22:28 编辑
C代码,都是相通的,具体语法有点差别。 #include int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left, int right) { int i, j, t, temp; if(left > right) return; temp = a[left]; //temp中存的就是基准数 i = left; j = right; while(i != j) { //顺序很重要,要先从右边开始找 while(a[j] >= temp && i < j) j--; while(a <= temp && i < j)//再找右边的 i++; if(i < j)//交换两个数在数组中的位置 { t = a; a = a[j]; a[j] = t; } } //最终将基准数归位 a[left] = a; a = temp; quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程 quicksort(i+1, right);//继续处理右边的 ,这里是一个递归的过程 } int main() { int i; //读入数据 scanf("%d", &n); for(i = 1; i <= n; i++) scanf("%d", &a); quicksort(1, n); //快速排序调用 //输出排序后的结果 for(i = 1; i < n; i++) printf("%d ", a); printf("%dn", a[n]); return 0; } |
|
|
|
你看一下函数QuickSort(int array[], int left, int right) 的第一参数,数组array[],是什么传递方式?
“值传递”? 我不清楚你用的语言和环境,如果是C/C++,这个参数是值传递, 在被调用函数内是另外一个副本,你的代码中,被调用函数内的变化是无法传递出去的,无法影响到调用者。 上面的示例中,为了方便使用了全局数组,函数递归调用中的变动都会体现在这个数组中。 另外,也可以使用指针或者引用之类的方式。 |
|
1 条评论
|
|
如楼上所说的递归调用问题,C语言好像是不支持递归调用的,这样的话堆栈肯定会溢出的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
579 浏览 1 评论
794 浏览 0 评论
MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记
614 浏览 0 评论
自定义系统时钟频率后,用库函数和微带两种方式点亮LED灯,为什么灯的闪烁频率不一致?
1413 浏览 2 评论
1634 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 19:55 , Processed in 0.381475 second(s), Total 56, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号