2012-12-16 57 views
0

我嘗試用quicksort對我的程序進行排序,但不知何故它沒有工作。我的程序讀取一個文件並將其轉換爲其他文件中的令牌。令牌必須按字母順序排列。請問有人可以幫助我嗎?快速排序字母順序Erlang

這是我的代碼:

-module(wp).h 
-compile([export_all]). 
% Open the File 

sortFile(File1,File2) -> 

{ok, File_Read} = file:read_file(File1), 

% making a list 
Liste = string:tokens(binary_to_list(File_Read), " "), 


% Quicksort List 
Sortierte_Liste = quicksort([string:join(Liste,"\n")]), 

%Written in the File. 

{ok,Datei_Schreiben} = file:open(File2, write), 

file:write(File_Write, Sortierte_Liste), 

file:close(File_Write). 

quicksort([])->[]; 

quicksort([X|XS])-> quicksort([Y||Y<-XS,YX]). 
+0

有你的快速排序功能沒有比較和YX是未綁定的,什麼是你真正使用的代碼? – Pascal

+1

準確地。這段代碼甚至不會編譯。另一個問題是你在快速排序之前加入。你可能想要加入後。另外請注意,在這種情況下,'lists:sort/1'函數將按照字典順序進行排序。 –

+0

只需使用'lists:sort/1' –

回答

0

我解決下是代碼的問題,但我對大寫和小寫的比較,另一個問題。我如何在isort函數中做到這一點。任何想法?

-module(wp).h 

-compile([export_all]). 
% Open the File 

sortFile(File1,File2) -> 

{ok, File_Read} = file:read_file(File1), 

% making a list 

Liste = string:tokens(binary_to_list(File_Read), "\n "), 


% isort List 

    Sort_List = isort(Liste), 

    ISort = string:join(Sort_List,"\n"), 



%Written in the File. 

{ok,Datei_Schreiben} = file:open(File2, write), 

file:write(File_Write, Isort), 

file:close(File_Write). 

isort([]) -> []; 

isort([X|XS])-> insert(X, isort(XS)). 

insert(Elem, []) -> [Elem]; 

insert(Elem, [X|XS]) when Elem=<X -> [Elem,X|XS]; 

insert(Elem, [X|XS]) -> [X|insert(Elem,XS)].