老师您好,我用您的代码在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回答
-
说明你的双路快排代码逻辑有错误:)
使用课程的代码试试看,是否有同样的问题?如果没有问题,自己比对调试一下,看看自己的实现哪里有问题?
==========
这个课程的所有代码,都可以通过课程的官方github获得。传送门:https://github.com/liuyubobobo/Play-with-Algorithms
具体的代码遇到问题,可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题。如果没有问题,可以仔细比对调试一下,看看自己的代码问题在哪里:)
继续加油!:)
012019-04-12 -
慕妹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是完全没有问题的,也没有警告
012019-04-12
相似问题