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

Сортировки массивов - C++

Восстановить пароль Регистрация
 
prosto_arina
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 15
20.12.2012, 00:21     Сортировки массивов #1
Здравствуйте! Помогите, пожалуйста, не могу разобраться. Код не работает(
вот задание:
Написать программу сортировки трёх массивов (хорошо, плохо и случайно упорядоченных) двумя методами:
1) Сортировка методом прямого выбора
2) Быстрая сортировка
посчитать количество сравнений.
код:
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
// сем.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <math.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int sort_pr_vibora(int a[], int n);
int byistraya_sort(int a[], int left, int right, int n);
 
int _tmain(int argc, _TCHAR* argv[])
{setlocale (LC_ALL, "Rus");
FILE *f;
int n=10000, step=50, j, i, left, right;                                // n - количество элементов массива, step - шаг увеличения размерности рассматриваемого массива
long long int counter1, counter2;
int *a, *b;
for(i=0; i<=n; i+=step)
 {  
  a=new int [i];
  b=new int [i];
 f=fopen("massiv_1.txt", "r");                                          //открываем файл для чтения(почти упорядоченный массив)
  for(j=0; j<=i; j++)
   { 
    fscanf(f, "%d", &a[j]);                                             //считываем первый массив
    b[j]=a[j];
   }
  fclose(f);
counter1=sort_pr_vibora(a,i);                                   //сортируем массив методом прямого выбора
counter2=byistraya_sort(b,left,right,i);                        //сортируем массив быстрой сортировкой
f=fopen("sort_massiv_1.txt", "a");                                      // открываем файл для записи 
    if(i==0)
        fprintf(f, "Шаг(i) \t Сортировка прямого выбора \t Быстрая сортировка\n");
        fprintf(f, "%d \t %lld \t\t %lld\n", i,counter1, counter2);     //выводим результат в файл
fclose(f);                                                              // закрываем файл
f=fopen("massiv_2.txt", "r");                                           //(плохо упорядоченный массив)
  for(j=0; j<=i; j++)
   { 
    fscanf(f, "%d", &a[j]);                                             //считываем второй массив
    b[j]=a[j];
   }
  fclose(f);
  counter1=sort_pr_vibora(a,i);                             //сортируем массив методом прямого выбора
  counter2=byistraya_sort(b,left,right,i);                  //сортируем массив быстрой сортировкой
  f=fopen("sort_massib_2.txt", "a");
  if(i==0)
   fprintf(f, "Шаг(i) \t Сортировка прямого выбора \t Быстрая сортировка\n");
  fprintf(f, "%d \t %lld \t\t %lld\n", i,counter1, counter2);               //выводим результат в файл
  fclose(f);
 
  f=fopen("massiv_3.txt", "r");                                         //(массив со случайными числами)
  for(j=0; j<=i; j++)
   { 
    fscanf(f, "%d", &a[j]);                                             //считываем третий массив
    b[j]=a[j];
   }
  fclose(f);
  counter1=sort_pr_vibora(a,i);                             //сортируем массив методом прямого выбора
  counter2=byistraya_sort(b,left,right,i);                  //сортируем массив быстрой сортировкой
  f=fopen("sort_massiv_3.txt", "a");
  if(i==0)
  fprintf(f, "Шаг(i) \t Сортировка прямого выбора \t Быстрая сортировка\n");
  fprintf(f, "%d \t %lld \t\t %lld\n", i,counter1, counter2);           //выводим результат в файл
  fclose(f);
 }
 printf("Сортировки массивов выполнены. Все данные вы можете просмотреть в файлах sort_massiv_1.txt,sort_massiv_2.txt,sort_massiv_3.txt\n");
    return 0;
}
int sort_pr_vibora(int a[], int n)
{long long counter1=0;
    for (int i=0; i<n; i++) 
    {
        int imin=i;                                                     //принимаем за номер наименьшего элемента массива номер первого рассматриваемого элемента
            for (int j=i+1, counter1=0; j<n; j++)                       //поиск минимального элемента из неупорядоченных элементов
            {
                if (a[j]<a[imin]) imin=j;                               //если наименьший элемент найден, то запоминаем его номер
                int t=a[i];                                             //меняем местами
                a[i]=a[imin];                                           //элементы с номерами
                a[imin]=t;                                              //i и imin
                counter1++; 
            }
    }
 
return (counter1);
}
 
 
int byistraya_sort(int a[], int left, int right, int n)
{long long int counter2=0,count_1,count_2;
    int i,j,x,y;
    i=left;
    j=right;
    x=a[(left+right)/2];                                                //находим значение среднего элемента массива
 
    do
    {
        while((a[i]<x) && (i < right))i++;
        while((a[j]>x) && (j > left)) j--;
 
        if(i<=j)
        {
            y=a[i];
            a[i]=a[j];
            a[j]=y;
            i++; 
            j--;
            counter2++;
        }
    }
    while(i<=j);
    {
        if(left<j) count_1=byistraya_sort(a,left,j,n);
        if(i<right) count_2=byistraya_sort(a,i,right,n);
    }
counter2+=count_1+count_2;
 return (counter2);
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 00:21     Сортировки массивов
Посмотрите здесь:

C++ Алгоритмы сортировки массивов
Функции для сортировки массивов C++
Способы сортировки линейных массивов. C++
алгоритмы сортировки массивов C++
Алгоритмы сортировки массивов C++
C++ Методы сортировки массивов.Метод пузырьковый
C++ Основные методы сортировки массивов
C++ Напишите функцию сортировки, похожую на функцию которая использовалась для сортировки массивов, с той разницей, что ее а

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

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

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