1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 
4. НЕ используйте форум для личного общения! 
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел! 
![]() ![]()  | 
	
| Vardes | 
                        
			
			  
			
				 Сообщение
					#1				
			 
		 | 
	
| 
        	
        		 Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация:    0           	 | 
       
			
			 Сейчас изучаю сортировки, и мне необходимо найти какую-нить дополнительную инфу для сортировки по ИНДЕКСАМ. Весь сайт ваш облазил, но ничего путного не нашёл. Помогите кто чем может. 
			
			
					
		 | 
	
| klem4 | 
                        
			
			  
			
				 Сообщение
					#2				
			 
		 | 
	
        	
        		![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация:    44           	 | 
       
			
			 Единственное, что может быть, мне кажется, тебе нужно кроме самого массива, заводить еще и массив индексов, потом в сортировке проходить по основному массиву, и если найдены 2 неупорядоченных лемента, то поменять местами соответствующие элементы в массиве индексов. 
			
			(каждый элемента массива индексов содержит собственный номер, т.е. a[1] = 1, a[2] = 2...a[n] = n); Кстати возможно это имеет смысл, если менять местами при сортировки приходится очень большие структуры, хотя ... кто его знает. Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";' 
					
		 | 
	
| Vardes | 
                        
			
			  
			
				 Сообщение
					#3				
			 
		 | 
	
| 
        	
        		 Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация:    0           	 | 
       
			
			 Допустим: 
			
			
					
		2 7 1 4 6 15 18 9 112 0 массив чисел 1 2 3 4 5 6 7 8 9 10 массив индексов Если взять последний эл-т в массиве чисел и начинать его перестанавливать, то первый шаг у нас будет таким,если я не ошибаюсь: 1 2 3 4 5 6 7 8 10 9, а как же нам запомнить то,что мы 112 и 0 поменяли местами, вот самый главный вопрос,в который я никак не вникнуть  | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#4				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			 Мы меням местами не сами значения а ИНДЕСЫ, представь, что ИНДЕКС - это нечто вроде УКАЗАТЕЛЯ в кучу - мы ведь при перестановке меняем местами только указатели а не обмениваем содержимое памяти. В данном случа нам не интересно, как расположены числа в основном массиве - нас интересует расположение ИНДЕКСОВ - ведь мы сортируем какраз этот массив (выбирая информацию для сравнения из массива чисел). 
			
			-------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| Vardes | 
                        
			
			  
			
				 Сообщение
					#5				
			 
		 | 
	
| 
        	
        		 Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация:    0           	 | 
       
			
			 Ну это мне понятно,что мы меняем местами индексы, а не сами эл-ты массива. Вопрос всё же в том,что массив индексов зависит от массива чисел,и как же проходит реализация последущего сравнения эл-ов в массиве чисел,если там мы изменения никаких не делаем.Или же каждому значению эл-та из массива индексов соответствует значение эл-та из массива чисел.Вроде вот этого : 
			
			
					
		a: 2 7 1 3 5 2 0 b: 1 2 3 4 5 6 7 a[b[1]]:=2 a[b[2]]:=7 ..... .....  | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#6				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			 Да, сравнивать нужно таким образом: 
			
			Код values[indexes[ind_a]] < values[indexes[ind_b]] А то, что лежит в массиве чисел - не важно, мы можем изменить некоторое значение в этом массиве и заново запустить сортировку - и мы получим сортированный массив индесков уже с учётом последнего изменения. Т.е. смотри - мы сортируем массив ИНДЕКСОВ, но критерием сравнения являются не сами целочисленные значения индексов, а числа, которые лежат в массиве чисел по этим индексам. Поэтому нам не важно, как расположены числа. Сообщение отредактировано: hardcase - -------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| Vardes | 
                        
			
			  
			
				 Сообщение
					#7				
			 
		 | 
	
| 
        	
        		 Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация:    0           	 | 
       
			
			 Если я всё же вас правильно понимаю, то мы просто берём начальный массив, делаем его копию и работаем уже с его копией. Так или всё же до меня так плохо доходит !? 
			
			
					
		 | 
	
| hardcase | 
                        
			
			  
			
				 Сообщение
					#8				
			 
		 | 
	
        	
        		![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация:    8           	 | 
       
			
			 Вероятно до тебя плохо доходит. 
			
			Ничета мы на копируем. Идея работы с индексами аналогична идеи работы с указателями, только если в случае с указателям мы должны разыменовать указатель, чтоб добраться до самого значения; то с индексами мы должы всего лишь обратиться к указанному элементу массива. -------------------- ИзВ ин ИтЕ   зА   нЕ рОв НЫй   П оч ЕРк 
					
		 | 
	
| Vardes | 
                        
			
			  
			
				 Сообщение
					#9				
			 
		 | 
	
| 
        	
        		 Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация:    0           	 | 
       
			
			 Всё, вроде теперь догнал. Ещё и с кодом разобрался. Вот программка, которая сортирует 10 чисел. Возможно, модераторы смогут это выложить в FAQ, а то, что-то совсем на сайте нет ничего про сортировку по ИНДЕКСАМ  
			
			
					
		Всем спасибо за помощь Код type index = array[1..10] of integer; Var i,j,k :integer; b:index; a:array[1..10] of integer; begin for i:=1 to 10 do read(a[i]); for i:=1 to 10 do b[i]:=i; for i:=2 to 10 do for j:=10 downto i do if a[b[j-1]]>a[b[j]] then begin k:=b[j-1]; b[j-1]:=b[j]; b[j]:=k; end; for i:=1 to 10 do write(a[b[i]]); end. Сообщение отредактировано: Vardes -  | 
	
![]() ![]()  | 
	
 
  | 
		Текстовая версия | 4.11.2025 12:58 |