Короткий ответ: исходя из контекста, я не могу сказать, является ли это всего лишь очень быстро и грязным кодом для личного использования или ключевой частью последнего внутреннего программного обеспечения Goldman Sachs, поэтому я открою говоря: eww. Это довольно забавный алгоритм сортировки; попробуйте использовать что-то немного менее «извилистым», если сможете.
Длинный ответ:
Два вопроса, которые сразу приходят вам в голову в вашем случае, - это производительность и правильность. Неформально убедитесь, что это быстро, и убедитесь, что ваш алгоритм является общим порядком .
(Конечно, если вы не сортируете более 100 предметов, вы, вероятно, можете пренебрегайте этим пунктом.) Эффективность имеет значение, так как скорость компаратора будет наибольшим фактором в скорости вашего сортировки (если алгоритм сортировки «идеален» для типичного списка). В вашем случае скорость компаратора будет зависеть в основном от размера строки. Строки кажутся довольно короткими, поэтому они, вероятно, не будут доминировать так же, как размер вашего списка.
Поворачивая каждую строку в кортеж строки с строками, а затем сортируя этот список кортежей, как было предложено в другом ответе, не удастся выполнить некоторые из ваших случаев, так как вы, видимо, будете иметь строки с несколькими номерами, которые появляются.
Другая проблема - правильность. В частности, если алгоритм, который вы описали, когда-либо разрешит A> B> ...> A, тогда ваш вид будет недетерминированным. В вашем случае я боюсь, что это возможно, хотя я не могу это доказать. Рассмотрим некоторые примеры синтаксического анализа, такие как:
aa 0 aa
aa 23aa
aa 2a3aa
aa 113aa
aa 113 aa
a 1-2 a
a 13 a
a 12 a
a 2-3 a
a 21 a
a 2.3 a
Я получил ту же ошибку, что и вы. Но dystroy верен: вы не можете запустить del
или любую другую команду, встроенную в cmd
, потому что нет файла del.exe
(или любого другого исполняемого файла в этом отношении).
Я заставил его работать с:
package main
import(
"fmt"
"os/exec"
)
func main(){
c := exec.Command("cmd", "/C", "del", "D:\\a.txt")
if err := c.Run(); err != nil {
fmt.Println("Error: ", err)
}
}
Если вам нужен вывод команды cmd:
if c, err := exec.Command("cmd","/c","del","a.txt").CombinedOutput(); err != nil {
log.Fatal(err)
} else {
fmt.Printf("%s\n", c)
}