Ок, явно ще трябва да обясня по-подробно!
Първо. Сортирането на n е елемента е математичестки, а не програмистки проблем и за него има разбработени томове и томове от литература. За справка има една монография от Доналд Кнут - "Изкуството на програмирането", но не я препоръчвам на начинаещ като тебе. Аз съм се учил по много книги, но една добра уводна книга е "Algorithms and Data Structures" от Michael Goodrich и Roberto Tamassia, но нямам представа, дали я има на българския пазар. Със сигурност, обаче на българския пазар има книга, която ще те въведе в сортирането - питай някой студент по информатика и ще ти препоръча нещо.
Методът на мехурчето, който използваш е най-неподходящия от всички възможни методи, защото при всичи случаи ще направи около n^2 операции - в това число сравнения и премествания. На математически жаргон се казва, че сложността му е O(n^2). Погледни в някоя книга за дефиниця, какво значи функция f да принадлежа на клас от сложност O(P(n)), където P(n) е полином по n. Методът, който аз ти предлагам - quicksort се счита за най-бързия метод, тъй като неговата средна сложност е O (n*log(n)). Няма значения конкретния програмен език, на който се пише. По принцип матетическта дефиниция, тази която съм ти дал по-горе е рекурсивна и буквалното й имплементиране би отнело много памет, но с малко въображение може да се напише итеративно и всичко да е тип-топ. С други думи - забрави за метода на мехурчето по следната причина. Ако имаш масив с да кажем 1 500 000 човека (телефонният указател на София), за сортирането му по метода на мехурчето ще ти трябват около 2250000000000 операции, ако всяка ти отнеме по една милисекунда (много груба оценка) 2250000000 секунди, което в часове е 62500. Ако изполваш quicksort и телефонният указател не е разбъркан точно отзад напред, ще ти трябват около 21331463.49910866 операции, или около 5 часа. Виждаш ли разликата, така че забрави за bubble sort и научи някой по-бърз алгоритъм, било то quick-sort, било то merge-sort, било то heap-sort и т.н. За справка пак те отправям към въпросната книга. Но сега да се върнем на quicksort и да ти обясня по-добробно. Няма да влизам в анализ на сложността на алгоритъма, защото може да се покаже, че при нарочно избрани данни и този алгоритъм е бавен, но както ти казах и по-горе една свястна имплементация е бърза и заема малко памет и в средно-статистическият случай е най-доброто възможно. И между другото, този алгоритъм го има като стандартна функция в c, така че няма нужда дори да го имплементираш. За справкa:
$ man 3 qsort
Сега отново към алгоритъма. Ето една друга страница, където има страхотно обяснение и анимация, как работи quicksort:
http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/qsort.htmlСлед като проумееш матечески алгоритъма идва втората стъпка. Как да го приложиш на практика. Тука се набиват на очи три проблема. Проблем едно: как да избегнеш рекурсията, проблем две, как да избегнеш допълният разход на памет и проблем три как да сравняваш елементите, които имаш да сравняваш.
Ще започна отзад напред. За сравняване на символни низове в c++ можеш да използваш функцията strcmp. Ето какво пише в документацията й. Не мога да го обясня по-добре от това.
int strcmp(const char *s1, const char *s2);
The strcmp() function compares the two strings s1 and s2. It returns
an integer less than, equal to, or greater than zero if s1 is found,
respectively, to be less than, to match, or be greater than s2.
За използване на inplace стратегията, т.е. за да избегнеш разхода на допълнителна памет пусни два итератора по масива и им разменяй местата, сравнявайки ги с пивота. За по-подробна информация:
http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/qsort1a.htmlА първият въпрос и той не е сложен, но за да го решим, направо да ти го напиша като програмен код. За това виж wikipedia-та от първият ми постинг - там има страхотен код. Ако все пак имаш проблеми обаче, пиши пак, ще видя, дали ще намеря малко време да драсна малко код

'>