Mathematica中的“倒置”选择排序8

时间:2012-09-13 03:46:53

标签: sorting wolfram-mathematica selection

好吧,我在使用这段代码时遇到了麻烦,它是关于在Mathematica中编写Selection Sort算法,但是我的意思是倒置,而不是搜索最小的数字并将其放在列表的第一个位置,我需要搜索最大的一个并将其放在最后一个位置。 我写过这段代码,但由于我是Mathematica的新手,我找不到解决方案。它没有对列表进行排序。非常感谢您的阅读,您的回答将非常有用!

      L = {};
n = Input["Input the size of the list (a number): "];
For[i = 1, i <= n, m = Input["Input a number to place in the list:"]; 
 L = Append[L, m]; i++]
SelectSort[L] := 
 Module[{n = 1, temp, xi = L, j}, While[n <= Length@L, temp = xi[[n]];
   For[j = n, j <= Length@L, j++, If[xi[[j]] < temp, temp = xi[[j]]];];
   xi[[n ;;]] = {temp}~Join~
     Delete[xi[[n ;;]], First@Position[xi[[n ;;]], temp]];
   n++;];
  xi]
Print[L]

1 个答案:

答案 0 :(得分:0)

这是一个工作版本。在SelectSort[]函数中,我只需要将函数变量更改为模式变量,即L_。除此之外,它似乎有效。

(* Function definition *)
SelectSort[L_] := Module[{n = 1, temp, xi = L, j},
  While[n <= Length@L,
   temp = xi[[n]];
   For[j = n, j <= Length@L, j++,
    If[xi[[j]] < temp, temp = xi[[j]]];
    ];
   xi[[n ;;]] = {temp}~Join~
     Delete[xi[[n ;;]], First@Position[xi[[n ;;]], temp]];
   n++;];
  xi]

(* Run section *)
L = {};
n = Input["Input the size of the list (a number): "];
For[i = 1, i <= n, m = Input["Input a number to place in the list:"];
 L = Append[L, m]; i++]
SelectSort[L]
Print[L]

{3,3,5,7,8}

{8,3,5,7,3}

输出首先是SelectSort[L]的排序列表,然后是原始输入列表L