Показать сообщение отдельно
Старый 14.01.2010, 23:16
Ixanezis вне форума Посмотреть профиль Отправить личное сообщение для Ixanezis Найти все сообщения от Ixanezis
  № 4  
Ответить с цитированием
Ixanezis

Регистрация: Sep 2009
Сообщений: 18
Используйте любой стандартный алгоритм сортировки.
К примеру есть у вас QuickSort
(Если не знаете, это такой быстрый алгоритм для сортировки (Сложность N*log N))
Взял на С++ что писал когда-то:

Код:
Quick(int b, int e)
{
	int i=b, j=e;
	int X = ar[(b+e) / 2]; // Здесь надо выбрать любой элемент массива.
	while (i<=j) {
		while (ar[i] < X) i++;
		while (ar[j] > X) j--;
		if (i<=j) {
			int tmp = ar[i];
			ar[i] = ar[j];
			ar[j] = tmp;

			i++;
			j--;
		}
	}
	if (i<e) Quick(i, e);
	if (b<j) Quick(b, j);
}
Этот алгоритм отсортирует массив ar, начиная с индекса b до e включительно
То есть вызывать функцию надо так:
Quick(0, a1.length-1); // Если взять ваш пример

Но вам нужно, насколько я понимаю, чтобы сохранились относительные позиции другого массива. Что ж, надо просто элементы другого массива менять аналогично первому, получим что-то вроде этого: (Type - тип элементов в другом массиве)

Код:
Quick(int b, int e)
{
	int i=b, j=e;
	int X = ar[(b+e) / 2]; // Здесь надо выбрать любой элемент массива.
	while (i<=j) {
		while (ar[i] < X) i++;
		while (ar[j] > X) j--;
		if (i<=j) {
			int tmp = ar[i];
			ar[i] = ar[j];
			ar[j] = tmp;

			Type tmp1 = ar1[i];
			ar1[i] = ar1[j];
			ar1[j] = tmp1;

			i++;
			j--;
		}
	}
	if (i<e) Quick(i, e);
	if (b<j) Quick(b, j);
}