2013-03-17 9 views
1

Я выполняю это назначение для uni, и требование заключается в том, что я использую любой алгоритм сортировки для сортировки списка в алфавитном порядке (без учета регистра). В основном говорят, что если список содержит некоторые строки, например «a» «C» «b» «1» и «3», он будет сортировать его либо «1» «3» «a» «b» «C», a "" b "" C "" 1 "" 3 " Я знаю, как сортировать массив целых чисел (код ниже, используя сортировку обмена), но как использовать список строк вместо этого? Как изменить приведенный ниже код, чтобы отсортировать список строк по алфавиту, сохраняя при этом принципы обмена (в данном случае)?Алгоритм сортировки для сортировки списка строк (C#)

Примечание: Мне не разрешено использовать List<string>.Sort() или какой-либо другой простой код.

 // sort a vector of type int using exchange sort 
     public void ExchangeSort(int[] array) 
     { 
      int pass, i, n = array.Length; 
      int temp; 
      // make n-1 passes through the data 
      for (pass = 0; pass < n - 1; pass++) 
      { 
       // locate least of array[pass] ... array[n - 1] 
       // at array[pass] 
       for (i = pass + 1; i < n; i++) 
       { 
        if (array[i] < array[pass]) 
        { 
         temp = array[pass]; 
         array[pass] = array[i]; 
         array[i] = temp; 
        } 
       } 
      } 
     } 
+0

Начнем с того, что происходит, когда вы меняете тип 'array' и' 'temp' в строку []' и 'string' соответственно? – Koterpillar

+0

@ Koterpillar Основная проблема заключается в том, что вы не можете сравнивать строки, используя <. вот ошибка: http://www3.picturepush.com/photo/a/12433536/1024/Anonymous/WpfApplication2---Microsoft-Visual-Studio-%28Adminis.jpg –

+0

Поэтому [String.Compare] (http:// /msdn.microsoft.com/en-us/library/system.string.compare.aspx), как в ответе @cHao. – Koterpillar

ответ

1

Возможно, вам понадобится сравнить строковый символ char.

В псевдокоде:

for each I from 0 to (shorter string's length - 1): 
    if left[I] is a letter and right[I] isn't (or vice versa): 
     the string that has a letter at [I] is "less" 
     done 
    else: 
     ("true" here means ignore case) 
     (you could also say `StringComparison.InvariantCultureIgnoreCase`, but eh) 
     result = String.Compare(left, I, right[I], I, 1, true) 
     if result < 0 
      left is "less" 
     else if result > 0 
      right is "less" 
     else 
      (both strings are equal so far) 
      next I 

(if you're here, the strings are "equal" up to this point) 

if both strings have the same length: 
    they're equal 
else: 
    the longer string is "greater" 
+0

Вы могли бы написать полный код? Я полный новичок, поэтому я не получаю ваш псевдокод. –

+0

Часть задачи состоит в том, чтобы заставить вас написать код самостоятельно. :) Дайте мне знать, какая часть нуждается в разъяснении, и я объясню. – cHao

+0

никогда не будет. разобрался без вашего «псевдокода», –

Смежные вопросы