2015-09-04 43 views
0

我有一個排序算法(我不知道)的可執行文件,我的實驗室基本上是通過輸入不同的情況並測試它的複雜性/穩定性來嘗試找出排序算法。可執行文件中包含的排序算法由Signal 11命令結束?

我在隨機列表上測試了它,它有500 000行,它工作正常(排序500 000行隨機數據0.17秒)。然而,我試圖輸入一個200000行的有序列表,這是終端給我的:

$ ./gen 180000 A | /usr/bin/time --format="%U seconds" ./sortB > /dev/null 
Command terminated by signal 11 
32.38 seconds 

爲什麼程序這樣做?如果我記得正確signall 11意味着一個分段錯誤的權利?所以它試圖訪問不在那裏的內存?該算法在500 000行隨機列表上運行良好,並且在有序列表的170 000行處執行29.48秒(在180 000時它給了我一個信號11)。正如我所說我無法訪問代碼,它是一個只執行文件,但我想不出爲什麼任何排序算法會有這個問題?

+0

這個算法肯定是'快速排序',並且由於'(遞歸)堆棧溢出'而導致'段錯誤(信號-11)'.. – vish4071

回答

5

你是對的。信號11是分段故障的信號。排序可執行文件試圖訪問未被分配的內存或不允許程序訪問的內存或內存不存在(空內存指針或垃圾指針)。

這可能是因爲排序可執行文件正在使用系統堆棧來執行它的操作(這在遞歸執行排序算法時很常見)。如果要排序的數組很長,系統堆棧可能會耗盡。

嘗試增加系統堆棧內存並檢查。 在Linux中有增加系統堆棧內存大小的命令/方法。

我希望這會有所幫助。 祝你好運。

+0

啊,好的我明白了。所以它不會發生隨機排序的原因,但發生在一個有序排序,是因爲有序的排序會需要更多的遞歸調用來達到功能的基本情況嗎? (這意味着該算法可能會快速排序或喜歡...嗯)。謝謝! – reetyn

相關問題