2015-10-21 3 views
2

Я хочу отсортировать строку в javascript без использования встроенного метода, просто используя for и сравнения, например 'a'> 'b';Сортировка строки без встроенных методов

Что-то, что не работает:

function replaceAt(str, i, char) { 
 
    return str.substr(0,i) + char + str.substr(i + 1) 
 
} 
 

 
function swap(str, i1, i2) { 
 
    return replaceAt(replaceAt(str, i1, str[i2]),i2,str[i1]); 
 
} 
 

 
function sort(str) { 
 
    var sorted = str; 
 
    for (var i = 0; i < str.length; i++) { 
 
     if (str[i] > str[i + 1]) { 
 
      str = swap(str, i, i+1) 
 
     } 
 
    } 
 
    return str; 
 
}

Псевдо-код или книги, курсы рекомендации по программированию приветствуются!

+0

Сортировка строк, как именно? Дайте нам пример того, как будет выглядеть отсортированная строка. – adeneo

+1

Вы только обмениваете смежные элементы. Я предлагаю вам прочитать правильные алгоритмы сортировки. У любого серьезного программиста должна быть копия «Сортировка и поиск» Кнута на их книжной полке. – Barmar

+0

Итак, 'str = str.split (''). Sort(). Join ('');' не то, что вы хотите? :-P –

ответ

2

Ваш код не применяет никакой алгоритм алгоритма сортировки, я рекомендую вам прочитать atleast 1, чтобы решить вашу проблему.

Ниже приведена программа, которая производит ожидаемый результат из вашей программы, используя selection sort.

swap и replace функции работают нормально.

function sort(str) { 
    var sorted = str; 
    //Selection sort 
    for (var i = 0; i < str.length; i++) { 
     for(var j = i + 1; j < str.length - 1; j++) { 
      if (str[i] < str[j]) { 
       str = swap(str, i, j) 
      } 
     } 
    } 
    return str; 
} 

console.log(sort("zaasfweqrouoicxzvjlmmknkniqwerpopzxcvdfaa")); 
//output: aaaaccdeeffiijkklmmnnoooppqqrrsuvvwwxxzzz 
0
<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript"> 
array=[4, 10, 2, 9, 6, 3, 13, 5]; 
function arrayOperations() 
{ 
    var count = array.length - 1, 
     temp, 
     j, 
     i; 

    for (j = 0; j < count; j++) 
    { 

     for (i = 0; i < count; i++) 
     { 

      if (array[i] > array[i + 1]) 
      { 
       temp = array[i + 1]; 
       array[i + 1] = array[i]; 
       array[i] = temp; 
      } 

     } 
    } 
document.write("ascending order is <br>") 
for(k=0;k<=array.length-1;k++){ 
    document.write(array[k]+ "<br>"); 
    } 

document.write("descending order is <br>") 
for(k=array.length-1;k>=0;k--){ 

     document.write(array[k]+ "<br>"); 
    } 
document.write("biggest number is <br>") 
for(k=array.length-1;k>=0;k--){ 

     if((array[k])>array[k-1]){ 
     document.write(array[k]+"<br>") 
     break; 
     } 
    } 
document.write("smallest number is <br>") 
for(k=0;k<=array.length;k++){ 

     if((array[k])<array[k+1]){ 
     document.write(array[k]+"<br>") 
     break; 
     } 
    } 




    } 




</script> 
    <title></title> 
</head> 
<body> 
array=[4, 10, 2, 9, 6, 3, 13, 5] 
<br> 
<input type="button" onclick="arrayOperations()" value="find"> 
</body> 
</html> 
Смежные вопросы