Сортировка коллекции и добавление элементов в коллекцию, часто, две отдельных функций. Конечно, можно добавлять элементы в коллекцию таким образом, чтобы элементы сортировались ... но это совсем другая задача - просто отсортировать массив элементов.
Если вы просто пытаетесь реализовать простой алгоритм сортировки, простым (но не оптимальным) алгоритмом, который легко кодировать, является «замедленная замена». ПСЕВДОКОД FPR алгоритма для сортировки в порядке возрастания описан кратко ниже: алгоритм сортировки
Begin DELAYEDSORT
For ITEM=1 to maximum number of items in list-1
LOWEST=ITEM
For N=ITEM+1 to maximum number of items in list
Is entry at position N lower than entry at position LOWEST?
If so, LOWEST=N
Next N
Is ITEM different from LOWEST
If so, swap entry at LOWEST with entry in ITEM
Next ITEM
End DELAYEDSORT
Задержанный замены легко понять и легко кода. Это обычно быстрее, чем сортировка пузырьков (меньше свопов), но все еще имеет сложную сложность O (n^2), и поэтому не подходит для сортировки очень больших наборов данных.
Если вы действительно хотите добавить элементы в отсортированную коллекцию, то вы можете добавить новый элемент в конец своей коллекции и прибегнуть к нему, используя приведенное выше. Если вы работаете с наборами данных, превышающими несколько сотен или тысяч элементов, эффективность будет низкой.
Альтернативное решение, которое все еще имеет O (N^2) временную сложность, но которые могут быть адаптированы, чтобы объединить добавление и сортировка является «сортировка вставкой», чьи псевдокод приводится ниже:
// The values in A[i] are checked in-order, starting at the second one
for i ← 1 to i ← length(A)
{
// at the start of the iteration, A[0..i-1] are in sorted order
// this iteration will insert A[i] into that sorted order
// save A[i], the value that will be inserted into the array on this iteration
valueToInsert ← A[i]
// now mark position i as the hole; A[i]=A[holePos] is now empty
holePos ← i
// keep moving the hole down until the valueToInsert is larger than
// what's just below the hole or the hole has reached the beginning of the array
while holePos > 0 and valueToInsert < A[holePos - 1]
{ //value to insert doesn't belong where the hole currently is, so shift
A[holePos] ← A[holePos - 1] //shift the larger value up
holePos ← holePos - 1 //move the hole position down
}
// hole is in the right position, so put valueToInsert into the hole
A[holePos] ← valueToInsert
// A[0..i] are now in sorted order
}
Существует много проблем с вашим кодом. Попробуйте более чистый подход. Особенно старайтесь отделить добавление значений от сортировки, поскольку это две вещи (или вы хотите добавить их отсортированным способом?). В качестве побочного элемента: ваш первый цикл while вызовет бесконечный цикл с этим ";" в конце строки. – Matthias
Возьмите loog на сортировку algo http://en.wikipedia.org/wiki/Sorting_algorithm – Yup
Извините, я не уточнил. Мне нужно ввести значения в отсортированном порядке. Мой код отформатирован намного лучше в моей среде IDE, но я забыл переформатировать его, как только я вставил его здесь. Я исправил «;», теперь я получаю пчелы, null, null. Любые идеи, как я могу это исправить? – UnlovedPanda