2014-12-17 4 views
0

У меня есть вектор, в котором хранятся элементы строки типа. я могу добавить элементы в вектор с помощьюСортировка строки-массива с использованием java

public void AddItem(String value) 
{ 

    data[length] = value; 
    length++; 
} 

однако я хотел бы вектор быть отсортированы в порядке возрастания когда элементы добавляются в определенном порядке, например, если я добавил эти пункты

v.AddItem("10"); 
v.AddItem("20"); 
v.AddItem("30"); 
v.AddItem("40"); 
v.AddItem("50"); 
v.AddItem("90"); 
v.AddItem("70"); 
v.AddItem("80"); 

Я ожидал бы, что «90» будет последним пунктом в списке. я попытался использовать это

for (int i = length- 1; i>1;i++) 
    { 

     if (data[length -1].compareTo(data[length]) > 0) 
       { 
        data[length-1] = temp; 
        data[length]=data[length -1]; 
        temp = data[length]; 
       } 
    } 

и он, похоже, не работает, может кто-нибудь указать мне в правильном направлении?

+0

Если 'data' были вектором, ваш код не будет компилироваться. Похоже, у вас есть «массив». – azurefrog

+2

'for (int i = length-1; i> 1; i ++)' Я бы сказал ... «неправильное направление». – Tom

+0

Я бы посмотрел на использование двоичной сортировки. Это означает, что каждая вставка только «O (logn)» в отличие от «O (nlogn)» (в среднем). – Obicere

ответ

0
Arrays.sort(data); 

вместо

for (int i = length- 1; i>1;i++) 
     { 

      if (data[length -1].compareTo(data[length]) > 0) 
        { 
         data[length-1] = temp; 
         data[length]=data[length -1]; 
         temp = data[length]; 
        } 
     } 

но рекомендую коллекции использования, если случайный доступ - ArraysList, например, , если постоянный доступ к элементам использовать LinkedList

List<YourType> list = new LinkedList<YourType>(); 
list.add(SomeValue); 
Collections.sort(list); 

Если значения различны, вам может использовать TreeSet, эти значения сортировки коллекции при добавлении нового значения:

Set<YourType> set = new TreeSet<YourType>(); 
set.add(SomeValue); 
// Collections.sort(list) - not needed, set already sorted :) 
0

Вы можете использовать Arrays.sort() (уведомление о том, что нужно добавить import заявления):

import java.util.Arrays; // or just: import java.util.*; 

public void AddItem(String value) 
{ 
    data[length] = value; 
    length++; 
    Arrays.sort(data); 
} 

Как и другие люди указали в комментариях, структура данных вы используете массив, не Vector.

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