erlang在运行快速排序后输出列表长度 - 第2部分

时间:2017-03-27 13:46:02

标签: function io erlang quicksort erl

所以我的第一个问题是answered,这是有道理的。它能够在排序后输出列表长度,但最初我要求使用io:format函数进行排序/ 0。但我的下一步跟进,是如何使用sort / 1?我已经能够解决这个问题了,但它在递归的过程中给出了它,所以我得到了多行并且错误。我的问题是我如何做io:格式化完成后快速排序(另请注意,我也希望列表没有重复)所以我只获得长度的一行而不是多行我到了下面?

以下是我的所得:

-module(list).
-export([sort/1]).

sort([]) -> [];


sort([First|Rest]) -> 

    io:format("~nThe length of the list is ~w~n", [length([First]++Rest)])),


    sort([ X || X <- Rest, X < First]) ++
    [First] ++
    sort([ X || X <- Rest, X > First]).

输出:

56> list:sort([2,2,2,3,3,3,1,1,8,6]).

The length of the list is 10

The length of the list is 2

The length of the list is 5

The length of the list is 2

The length of the list is 1
[1,2,3,6,8]

所以没有重复的排序列表是正确的,但是我如何在这里显示io:format函数呢?

56> list:sort([2,2,2,3,3,3,1,1,8,6]).

[1,2,3,6,8]
The length of the list is 5

1 个答案:

答案 0 :(得分:3)

除非我弄错了,否则你无法区分io:format/2 inside递归函数的用法。

您可以将打印与递归部分分开。

sort(L)->
   Result = quicksort(L),
   io:format("~nThe length of the list is ~w~n", [length(Result)]),
   Result.

quicksort([]) -> [];
quicksort([First|Rest]) -> 
   quicksort([ X || X <- Rest, X < First]) ++
   [First] ++
   quicksort([ X || X <- Rest, X > First]).