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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ввести строку символов. Определить длину введенной строки L, и если длина L кратна 3, то удаляются все символы, стоящие на местах с номером кратным 3 http://www.cyberforum.ru/cpp-beginners/thread739188.html
!!!!!
C++ Перегрузка и шаблоны Для каждого пункта задания создать: 1. Перегружаемые функции для типов int и double 2. Шаблоны функций Все необходимые данные для функции должны передаваться им в качестве параметров. Привести примеры программ, использующих эти шаблоны для типов int и double. Как сделать операции с массивом то я понимаю, но не понимаю в чем заключается перегрузка функций, и что такое шаблоны. Тему... http://www.cyberforum.ru/cpp-beginners/thread739174.html
C++ Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов
Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов
C++ Транспонированная неквадратная матрица
Помогите, пожалуйста. Хочу получить из матрицы A(m x n) матрицу B(n x m) - могут быть неквадратными int i=0, j while(i<m) { j=0; while(j<n) { masB = masA; j++;
C++ Создать функцию, которая вычисляет член рекуррентной последовательности http://www.cyberforum.ru/cpp-beginners/thread739155.html
Создать функцию, которая вычисляет n-й член рекуррентной последовательности, заданной ниже. При выполнении задания рекомендуется использовать рекурсию. U1=2 U2=0.8 Uk=sin(1.5k+Uk-1)+0.25Uk-2 Помогите пожалуйста решить задачу. Я не понимаю как вписать такую формулу в мою задачу, так как с индексами в С++ не стыкался.
C++ не удалось вывести аргумент шаблон для "std::_String_iterator error C2784: не удалось вывести аргумент шаблон для "std::_String_iterator<_Elem,_Traits,_Alloc>" из "std::string" Есть код который сам не писал и который должен копировать некоторые элементы из этой программы #include "stdafx.h" #include <iostream> using namespace std; string s = "\""; void r(string &s, char c, string str) { подробнее

Показать сообщение отдельно
prosto_arina
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 15
20.12.2012, 00:21     Сортировки массивов
Здравствуйте! Помогите, пожалуйста, не могу разобраться. Код не работает(
вот задание:
Написать программу сортировки трёх массивов (хорошо, плохо и случайно упорядоченных) двумя методами:
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);
 }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru