Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сортировка


Автор: df_3 10.5.2004, 23:40
Есть массив его надо отсортировать методом прямого включения. Алгоритм я понял но вот чего-то с реализацией никак не выходит. Помогите плз может в коде ошибка


Код

void Straight_Insertion(int a[], int size){
int i,j,x;
for (i=2; i<size; i++)
   {
   x=a[i];
   j=i;
   a[0]=x;
     do {
      a[j]=a[j-1];
      j=j+1;      
        } while (a[j-1]>x);
       
        a[j]=x;
   }
    }

он то вылетает просто ничего не говоря то несколько раз печатет второй элемент массива
sad.gif

Автор: Kurt 11.5.2004, 01:09
Вобщем, вот тебе такая сортировка.
Извиняй за, возможно, "неСишный" стиль - я на Си мало пишу..
Короче, вот код (можно компилить и запускать):

Код

#include <stdio.h>

//собственно функция сортировки
void InsertSort(int A[], int size){

int j;
  int TmpVal;
for (int i=0; i<size; i++){
//ищем j - индекс в массиве, куда надо вставить элемент
   j = i;
     TmpVal = A[i];
//пока есть элементы, бОльшие, чем наш..
     while ((j>0) && (TmpVal<A[j-1])){
//сдвигаем их вправо
      A[j] = A[j-1];
        j--;
     };
//вставляем элемент в найденную позицию
     A[j] = TmpVal;
};
return;
};

void main(){
int n=10; //определим 10-элементный массив
  int* arr = new int[n];
//заполним его от большего к меньшему
  for (int i=0; i<n; i++){
   arr[n-i-1] = i;
  };

  printf("Before..\n");
  for (int i=0; i<n; i++){
   printf("%d ",arr[i]);
  };

//наша сортировка
  InsertSort(arr, n);

//смотрим, что получилось
  printf("\nAfter..\n");
  for (int i=0; i<n; i++){
   printf("%d ",arr[i]);
  };


delete[] arr;
getchar();
return;
}


Все. Надеюсь, хоть чем-то помог..

Автор: Artiom 11.5.2004, 01:59
Инструкция do выполняется один раз до проверки условия продолжения цикла. Возможно в этом причина ошибок. и вообще по-моему у тебя a[0] теряется. ты его затираешь a[2]-ым.

Автор: df_3 12.5.2004, 01:06
Огромное спасибо за помощь! smile.gif Я разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)