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

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

Восстановить пароль Регистрация
 
777Super
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 14
05.06.2013, 18:23     Изменить алгоритм сортировки (вместо сортировки вставками поставить сортировку слиянием Merge) #1
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++ Алгоритм сортировки In-place merge sort
C++ Сортировки слиянием с динамическим массивом
C++ не могу написать программу которая осуществляет алгоритм сортировки вставками
Ошибка в коде сортировки слиянием C++
C++ Алгоритм сортировки слиянием. Исправить ошибки в коде
Сортировку вставками меняем на сортировку слиянием C++
C++ Реализация сортировки двухпутевыми вставками (Pascal -> C++)

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

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

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