Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2011, 23:49   #1
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию Сортировка

Это алгоритм быстрой сортировки массива.
Код:
void sort(int *a,int left,int right);
void sort(int *a,int left,int right){
register int i,j;
int x,y;
i=left; j=right;
x=a[(left+right)/2];
do{ 
while((a[i]<x)&&(i<right)) i++;
while((a[j]>x)&&(j>left)) j--;
if(i<=j){
y=a[i];
a[i]=a[j];
a[j]=y;
i++; j--;}
} while(i<j);
if(left<j) sort(a,left,j);
if(i<right) sort(a,i,right);
return;}
Но мне нужно не трогать сами значения массива, а отсортировать их номера, которые я записываю в массив g.(изначально g[0]=0; g[1]=1;g[2]=2 и т.д.) Т.е. в g[0] был бы номер самого маленького числа, в g[1] следующего за ним и т. д.
Код:
int g[100],a[100];

scanf("%d",&n);
for(int i=0; i<n; i++) 
{
g[i]=i; 
scanf("%d",&a[i]);
}
sort(a,0,n-1);
Я смог сделать это только в простой сортировке, но это слишком медленно, не укладываюсь во время.
Код:
for(int i=0;i<n-1;i++){
for(int j=i+1; j<n;j++){ 
	if(a[g[i]]>=a[g[j]]){
		p=g[i]; g[i]=g[j];g[j]=p;
	}
}}
Помогите сообразить, как можно сделать это,используя алгоритм быстрой сортировки.
LOST94 вне форума Ответить с цитированием
Старый 08.01.2011, 00:08   #2
pacniwassano
Пользователь
 
Регистрация: 02.12.2010
Сообщений: 81
По умолчанию

так и сортируй массив g[], где эти самые номера у тебя храняться
sort(g, 0, 99);
pacniwassano вне форума Ответить с цитированием
Старый 08.01.2011, 17:08   #3
LOST94
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 47
По умолчанию

так не получится, потому что массив g, можно сказать, и так отсортирован по возрастанию.

пример:
a[0]=5; a[1] = 7; a[2] = 2; a[3] = 1;

Эти значение должны остатся прежними, но массив g должен выглядеть:
g[0]=3; g[1] = 2; g[2] = 0; g[3]=1;
LOST94 вне форума Ответить с цитированием
Старый 08.01.2011, 17:28   #4
pacniwassano
Пользователь
 
Регистрация: 02.12.2010
Сообщений: 81
По умолчанию

значит создавай временный массив равный твоему, его сортируй, и потом записывай индексы
pacniwassano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32