Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
777Super
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 14
#1

Изменить алгоритм сортировки (вместо сортировки вставками поставить сортировку слиянием Merge) - C++

05.06.2013, 18:23. Просмотров 244. Ответов 0
Метки нет (Все метки)

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "stdafx.h"
#include "string.h"
#include "iostream"
#include <fstream>
#include <string>
#include <vector>
#include <istream>
#include "windows.h"
 
using namespace std;
 
 
 
void FileloadBuf(char** fin, vector<int> &num, int* size, short* err)
{
    FILE *f;
    int i,j;
    int q=0;
    char buf[16]="";
    char buf1[32]="";
    char* h;
    char h1[14]="";
    f=fopen(*fin,"r");
    
    if (f==NULL)
    {
        *err=2;
    }
    else
    {
        while (!feof(f))
        {
            memset (buf, 0, sizeof(buf));
            fgets(buf,16,f);
            strcat(buf1,buf);
            h=strtok(buf1," ");
            num.push_back(atoi(h));
//          cout<<num.size()<<endl;
            for (i=0;i<16;i++)
            {
                h=strtok(NULL," ");
                if (h==NULL) break;
                strcpy(h1,"");
                strcat(h1,h);
                num.push_back(atoi(h));
//              cout<<num.size()<<endl;
            }
            memset (buf1, 0, sizeof(buf1));
            if (isdigit(buf[14]))
            {
                num.pop_back();
                strcpy(buf1,h1);
                continue;
            }
        }
    *size=num.size();
    }
    fclose(f);
}
 
void Sort(vector<int> &num, int* size)
{
  int x;
  long i, j;
 
 
 
  // сортировка вставками
  for ( i=0; i < *size; i++) 
    {  
    x = num[i];
        
        for ( j=i-1; j>=0 && num[j] > x; j--)
        num[j+1] = num[j];      
   
    num[j+1] = x;
    } 
  
 }
 
void Obrparam (int argc, char* argv[], char** fin, char** fout)
    {
        int i;
        for (i=1;i<argc;i=i+2)
        {
            if (strcmp(argv[i],"-i")==0)
                {
                    *fin=argv[i+1];
                    continue;
                }
            if (strcmp(argv[i],"-o")==0)
                {
                    *fout=argv[i+1];
                    continue;
                }
        cout << argv[i]<<" invalid";
        }
}
 
void Upload(char** fout, vector<int> &num, int *size)
{
    FILE *f;
    f=fopen(*fout,"w");
    int i;
    for (i=0;i<*size;i++)
    fprintf(f,"%d ",num[i]);
    fclose(f);
}
 
int main(int argc, char* argv[])
{
    
    char *fin=NULL, *fout=NULL;
    int size=0;
    short err=0;
    vector<int> num;
    Obrparam(argc,argv,&fin,&fout);
    FileloadBuf(&fin,num,&size,&err);
    if (err==1)
    {
        cout << "Invalid input data" << endl;
        return 0;
    }
    if (err==2)
    {
        cout << "File with input data not found" << endl;
        return 0;
    }
    int t=GetTickCount();
    Sort(num,&size);
    int t1=GetTickCount();
    int CurrentTime=t1-t;   
    cout << "time " << CurrentTime << " ms" << endl;
    Upload(&fout,num,&size);
    return 0;
}
В этой программе всего лишь мне надо поменять алгоритм сортировки на Merge... Я не знаю как, прошу помощи))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 18:23     Изменить алгоритм сортировки (вместо сортировки вставками поставить сортировку слиянием Merge)
Посмотрите здесь:

C++ Реализовать шаблон сортировки двухпутевыми вставками
Реализация сортировки вставками C++
C++ Алгоритм сортировки In-place merge sort
C++ Сортировки слиянием с динамическим массивом
C++ Реализация алгоритма сортировки вставками
Ошибка в коде сортировки слиянием C++
C++ Алгоритм сортировки слиянием. Исправить ошибки в коде
Сортировку вставками меняем на сортировку слиянием C++
C++ Реализация сортировки двухпутевыми вставками (Pascal -> C++)
Внешние сортировки. Сортировка слиянием. Естественное слияние C++
C++ Ассемблерные вставки в C++. Алгоритм сортировки слиянием
C++ Алгоритм сортировки вставками

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru