1

好吧,我在使用这段代码时遇到了问题,它是关于在 Mathematica 中编写选择排序算法,但是我的意思是倒置,而不是搜索最小的数字并将其放在列表的第一个位置,我需要搜索最大的一个并将其放在最后一个位置。我已经编写了这段代码,但由于我是 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]
4

1 回答 1

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

于 2012-09-13T08:01:02.263 回答