0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 5
1

Сортировка вставками (не работает)

06.06.2017, 20:16. Показов 815. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа генерирует массив в фаил и сортирует его методом вставок. Но сама сортировка не происходит
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
 
int main(void) 
{
    srand(time(NULL));
    FILE *file; 
    int i, j=0, step=0, tmp=N;
    int *A=(int*)malloc(sizeof(int)*N);
    int mas[N];
    printf("Array:\n");
    for(i=0; i<N; ++i)
    {
        mas[i] = rand() %(100-(-100)+1)+(-100);
        printf("%d ", mas[i]);
    }
    puts("");
    if((file = fopen("C://out.dat","wb+"))==NULL)
        printf( "The file was not opened\n" ); 
    else
    {
        fwrite(&tmp,sizeof(int),1,file);
        fwrite(mas,sizeof(int),N,file);//òåïåðü â ôàéëå íàø ìàññèâ(áèíàðíûé) 
        rewind(file);
        fread(&step, sizeof(int), 1, file); 
        fread(A, sizeof(int), step, file);
        for(i = 1; i < N; i++)
        {
            tmp = A[i];
            for(j = i; j>=step; j-=step)
            {
                tmp=A[i];
                for(j=i-1; j>=0 && A[j]>tmp; j--)A[j+1]=A[j];   
            A[j+1] = tmp;
        }
    }
        printf("Sorted array:\n");
        for (i = 0; i < 100; i++)
        {
            printf("%d ", A[i]);
        } 
    }
    fclose(file);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 20:16
Ответы с готовыми решениями:

Неправильно работает сортировка вставками
Как я понял не работает функция Sort. int main() { FILE *fp=fopen(&quot;start.txt&quot;,&quot;r&quot;); int...

Сортировка вставками
Сортировка вставками массивов из 3-х элементов Не до конца сортирует int tmp,pos,b=0; for(int...

Сортировка вставками
Можете подробно обьяснить программу??? void sort (int *mas,int kol); int kol; int main(int argc,...

Сортировка вставками
Можете подробно обьяснить программу??? void sort (int *mas, int kol){ int i,j,ii,x;...

9
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
06.06.2017, 20:43 2
Цитата Сообщение от Asaevd Посмотреть сообщение
Но сама сортировка не происходит
Бывает...
P.S. Вы всерьёз рассчитываете, что кто-то станет разбираться в деталях в этом мусорном коде?

А коды сортировки, в том числе и вставкой, можете смотреть здесь: Задачи по программированию на языке C (стр. 70 в тексте).
0
1279 / 872 / 254
Регистрация: 30.06.2015
Сообщений: 4,554
Записей в блоге: 51
07.06.2017, 13:01 3
Цитата Сообщение от Asaevd Посмотреть сообщение
Но сама сортировка не происходит
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
 
int main(void) 
{
    srand(time(NULL));
    FILE *file; 
    int i, j=0, step=0, tmp=N, x;
    int *A=(int*)malloc(sizeof(int)*N);
    int mas[N];
    printf("Array:\n");
    for(i=0; i<N; ++i)
    {
        mas[i] = rand() %(100-(-100)+1)+(-100);
        printf("%d ", mas[i]);
    }
    puts("");
    if((file = fopen("C://out.dat","wb+"))==NULL)
        printf( "The file was not opened\n" ); 
    else
    {
        fwrite(&tmp,sizeof(int),1,file);
        fwrite(mas,sizeof(int),N,file);//òåïåðü Гў ГґГ*éëå Г*Г*Гё Г¬Г*Г±Г±ГЁГў(ГЎГЁГ*Г*Г°Г*ûé) 
        rewind(file);
        fread(&step, sizeof(int), 1, file); 
        fread(A, sizeof(int), step, file);
 
    for(i=1; i<step; ++i)
        {
            x=A[i];
            if(A[i-1]>x)
            {
                j=i-1;
                while(A[j]>x && j>=0)
                {
                    A[j+1]=A[j--]; 
                }
                A[j+1]=x;
            }
        }
        printf("Sorted array:\n");
        for (i = 0; i < 100; i++)
        {
            printf("%d ", A[i]);
        } 
    }
    fclose(file);
    return 0;
}
Цитата Сообщение от Olej Посмотреть сообщение
Вы всерьёз рассчитываете, что кто-то станет разбираться в деталях в этом мусорном коде?
Лучше предложи свой вариант, чем троллить.
0
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
07.06.2017, 17:15 4
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Лучше предложи свой вариант, чем троллить.
А я и предложил: по ссылке до 10 разных вариантов для сравнения.
Только для дурачков, которые по ссылке посмотреть не способны, оно не подходит, к сожалению...
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.06.2017, 12:39 5
 Комментарий модератора 
Olej, Запрещено публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа.

В крайнем случае - выкладывайте код, оставляя ссылку как первоисточник.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36206 / 20182 / 4200
Регистрация: 12.02.2012
Сообщений: 33,420
Записей в блоге: 13
08.06.2017, 15:40 6
Не понятно, при чем здесь файл? Или нужно сортировать вставками файл, а не массив? Тогда - другое дело.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36206 / 20182 / 4200
Регистрация: 12.02.2012
Сообщений: 33,420
Записей в блоге: 13
08.06.2017, 17:45 7
Вот сортировка выбором прямо в дисковом файле:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <stdlib.h>
 
int GetInt(FILE *f, int p)
{
    int r;
    fseek(f,(p*4),SEEK_SET);
    fread(&r,sizeof(r),1,f);
    return r;
}    
 
void PutInt(FILE *f, int p, int v)
{
    fseek(f,(p*4),SEEK_SET);
    fwrite(&v,sizeof(v),1,f);
}    
 
int iSort(char *fname, int N)
{
  FILE *f;   
  int i,j,x,y,k;
  
  f=fopen(fname,"rb+");
  if (f==NULL) return 1;
  
  for (i=1; i<N; i++)
  {
      x=GetInt(f,i); 
      
      for (j=i-1; j>=0; j--)
      {
          y=GetInt(f,j);
          
          if (x<y)
          {
             PutInt(f,(j+1),y);
             k=j;
          }   
          else
          {
             k=j+1;
             break;
          }
                 
      }
      
      if (k>=0) PutInt(f,k,x);
      
      
  }
  
  fclose(f); 
  return 0;
  
} 
 
void PrintFile(char *fname)
{
     FILE *f;
     int i,r,fsize;
     
     f=fopen(fname,"r");
     if (f==NULL) return;
          
     fseek(f,0,SEEK_END);
     fsize=ftell(f);
     
     i=0;
     
     while (1)
     {
        if (i*4>=fsize) break;
           
        r=GetInt(f,i);
        printf("%d ",r);
        
        i++;
        
     }       
     fclose(f);
     printf("\n\n");
}     
 
int main(int argc, char *argv[])
{
 
  FILE *f;
  char *fname="f.dat";
  int A[10]={3,-7,12,1,3,3,6,7,98,-55};
  int i;
  
  f=fopen(fname,"w");
  if (f==NULL) return 1;
  
  for (i=0; i<10; i++) PutInt(f,i,A[i]);
  
  fclose(f);
  
  PrintFile(fname);
  
  iSort(fname,10);
  
  PrintFile(fname);
  
  system("PAUSE");  
  return 0;
}
Миниатюры
Сортировка вставками (не работает)  
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36206 / 20182 / 4200
Регистрация: 12.02.2012
Сообщений: 33,420
Записей в блоге: 13
08.06.2017, 19:22 8
Извините, не выбором, а именно вставками.
0
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
09.06.2017, 00:53 9
Цитата Сообщение от MrGluck Посмотреть сообщение
В крайнем случае - выкладывайте код, оставляя ссылку как первоисточник.
Т.е. вы считаете, что 5 страниц текста с разъяснениями будут самыми уместным?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.06.2017, 08:29 10
Цитата Сообщение от Olej Посмотреть сообщение
Т.е. вы считаете, что 5 страниц текста с разъяснениями будут самыми уместным?
Я считаю, что для сортировки вставками хватит и меньшего количества текста, как минимум для объяснения сути.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2017, 08:29
Помогаю со студенческими работами здесь

Сортировка вставками
Как отсортировать элементы стоящие на нечетных местах в порядке возрастания? вот что-то пытался...

Сортировка вставками
Отсортировать элементы методом вставками, и найти максимальное. Например задается массив чисел и...

Сортировка вставками
Мне нужно написать программу, в которой бы присутствовала сортировка вставками. Желательно в...

Си. Сортировка вставками
Отсортировать массив в порядке убывания методом вставок


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru