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

Posted

技术标签:

【中文标题】erlang 在运行快速排序后输出列表长度 - 第 2 部分【英文标题】:erlang output the list length after having it run a quicksort - Part 2 【发布时间】:2017-08-20 06:24:34 【问题描述】:

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

这是我拥有和正在得到的:

-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】:

除非我弄错了,否则您将无法按原样区分 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]).

【讨论】:

是的,我的问题是我没有将其视为函数中的函数。所以这是有道理的。感谢您回答我的菜鸟问题。

以上是关于erlang 在运行快速排序后输出列表长度 - 第 2 部分的主要内容,如果未能解决你的问题,请参考以下文章

快速选择算法

leetcode 215. 数组中的第K个最大元素(快速排序)

数据结构——快速排序(使用Java)

AcWing 785. 快速排序

第5周

第k个数(排序)