请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,我用您的代码在VS2017上运行

使用了一个含30个元素的高频重复的数组,最后快排和双路快排得出的结果不一样,并且双路快排的结果是有问题的,请教您原因。
int a[] = { 3,1,2,5,6,3,5,7,3,2,1,4,5,3,6,9,7,5,4,3,5,2,1,3,5,6,7,4,3,2,1};
int b[]= { 3,1,2,5,6,3,5,7,3,2,1,4,5,3,6,9,7,5,4,3,5,2,1,3,5,6,7,4,3,2,1 };
quickSort(a, 30);
sortTestHelper::printTest(a, 30);
quickSortDoubleTrack(b, 30);
sortTestHelper::printTest(b, 30);
图片描述
图片描述

正在回答

2回答

说明你的双路快排代码逻辑有错误:)


使用课程的代码试试看,是否有同样的问题?如果没有问题,自己比对调试一下,看看自己的实现哪里有问题?


==========


这个课程的所有代码,都可以通过课程的官方github获得。传送门:https://github.com/liuyubobobo/Play-with-Algorithms 


具体的代码遇到问题,可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题。如果没有问题,可以仔细比对调试一下,看看自己的代码问题在哪里:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹626757 #1
    非常感谢老师!
    回复 有任何疑惑可以回复我~ 2019-04-12 16:25:44
提问者 慕妹626757 2019-04-12 16:35:02

原因可能是Linux下和VS2017下的环境有一定差别,我主要调整了这一方面,最后出来了正确的结果,做一个小小的总结,希望后来的同学不必走弯路:

(1)VS2017下使用srand和rand一定要包括<stdlib.h>

(2)VS2017下不建议使用#if_def的结构,因为系统的识别不是很好,头文件开头直接加#pragma once

(3)VS2017下swap运算的速度非常慢,建议直接写交换的过程,节省运行时间

(4)VS2017无法分配动态数组,只能使用堆来分配内存,老师的注释里面有

(5)VS别的版本不知道,但是2017使用copy是完全没有问题的,也没有警告


0 回复 有任何疑惑可以回复我~
  • 赞!感谢分享:)关于swap的性能问题,试一下用release模式?应该会好很多:)
    回复 有任何疑惑可以回复我~ 2019-04-12 16:40:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信