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

来源:3-7 双路快速排序法

慕妹626757

2019-04-12

使用了一个含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回答

liuyubobobo

2019-04-12

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


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


==========


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


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


继续加油!:)

0
1
慕妹626757
非常感谢老师!
2019-04-12
共1条回复

慕妹626757

提问者

2019-04-12

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

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

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

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

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

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


0
1
liuyubobobo
赞!感谢分享:)关于swap的性能问题,试一下用release模式?应该会好很多:)
2019-04-12
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程