Выпуск № 1367 от 04.08.2009, 21:05
Администратор рассылки: Dr_Andrew, Модератор
В рассылке: подписчиков - 637, экспертов - 157
В номере: вопросов - 1, ответов - 1 IRC-канал по теме: #C
Оценить выпуск >>
Нам очень важно Ваше мнение об этом выпуске рассылки!
Вопрос № 170932: Здравствуйте уважаемые программисты! Написал программу по сортировке массива методом Шелла. И вот с проблемой одной разобраться не могу. Все отлично сортируется кроме первого элемента! Как не ломал целый день голову не могу понять в чем дело. Независ...
Вопрос № 170932:
Здравствуйте уважаемые программисты! Написал программу по сортировке массива методом Шелла. И вот с проблемой одной разобраться не могу. Все отлично сортируется кроме первого элемента! Как не ломал целый день голову не могу понять в чем дело. Независимо от количества элементов и от вида массива первый элемент не сортируется и все тут! Знаю что возможно это слишком легко чтобы задавать вопрос на форум, но к сожалению мне больше не куда обратиться, а сам я не вижу ошибки. Если кто разбирается в сортировках
прошу вашей помощи. Сама сортировка происходит в функции "sort".
Отвечает Micren, Бакалавр :
Здравствуйте, Slayder. Просто у Вас первый элемент никогда не берется в расчет while(k>0), а первый элемент имеет индекс 0.
Код:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 //кол-во эл-в массива void sort (long *x, long
n); // прототип функции сортировки методом Шелла
int main () { long x[N]; // обьявление массива x[N] int i; srand((unsigned int)time(0)); printf ("\n Vyvod massiva: \n"); for (i=0;i<N;i++) { x[i]=rand()%100; //массив заполняется случ. Числами (до 99) printf("%5d",x[i]); } sort (x,N); system("PAUSE"); }
void sort(long* x,long n ) { int i,k,tmp,c,m; c=0; m=0; /
/ Переменные для подсчета кол-ва сравнений и пересылок между элементами int incr=n/2; while (incr>0) { for (i=incr; i<n; i++) { k=i-incr; while (k>=0) { c++; if (x[k]>x[k+incr]) { tmp=x[k]; x[k]=x[k+incr]; x[k+incr]=tmp; m++; k=k-incr; } else k=-1; } } incr=incr/2; }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.