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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Salamnov
4 / 4 / 0
Регистрация: 29.03.2009
Сообщений: 37
#1

сортировка двумерного массива - C++

29.04.2009, 20:26. Просмотров 1437. Ответов 4
Метки нет (Все метки)

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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
 
int i,j,n,k,co,cp;
//----------------------------------------------------
void form_matr(double **a,int n){ //формирование матрицы
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            a[i][j]=sinh(i)+sinh(j)-2*sinh((i+j)/2)*cosh((i-j)/2)+i+j;
    }
}//----------------------------------------------------
void print_matr(double **a,int n){ //печать матрицы
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf("%8.2f ",a[i][j]);
        printf("\n");
    }
}//----------------------------------------------------
void selsort(double **a, int n, int k) { // сортировка методом простого выбора
double x; int v,i,j;
    co=0; cp=0;
     for(i=0;i<n;i++){
            v=i; x=a[k][i];
             for(j=i+1;j<n;j++)
                if (fabs(a[k][j])<fabs(x)){v=j; x=a[k][j]; cp++;};
                                 }
        a[k][v]=a[k][j];
        a[k][j]=x;
        co++;
        }
 
 
//----------------------------------------------------
void bubsort(double **a, int n,int k){ ..сортировка пузырьком
double x; int i,j;
    co=0; cp=0;
     for(i=0;j<n;j++){
            for(j=n-1;j>i;j--){
                 cp++;
                 if(fabs(a[k][j-1])<fabs(a[k][j])){
                 x=a[k][j-1];
                 a[k][j-1]=a[k][j];
                 a[k][j]=x;
                 co++;
                }
             }
         }
 
}//----------------------------------------------------
void qusort(double **a, int l,int r){ //рекурсивная сортировка
    int i, j;
    double c, s;
    co=0; cp=0;
    i=l; j=r;
    s=fabs(a[k][(l+r)/2]);
    do{
            while(a[k][i] < s) {i++ ; cp++;}
            while(a[k][j] > s) {j-- ; cp++;}
            if (i<=j){
            c=a[k][i];
            a[k][i]=a[k][j];i++;
            a[k][j]=c;j--;
            co++;  }
     } while (i<=j);
 if (l<j)qusort(a,l,j);
 if (r>i)qusort(a,i,r);
}//----------------------------------------------------
 main() {
 double **a;
    int num;   cp=co=0;
    printf("\n введите n => "); scanf("%d",&n);
    printf("\n введите k => "); scanf("%d",&k);
    printf("\nупорядочивание методом:");
    printf("\n   1 : простого выбора*");
    printf("\n   2 : пузырька*");
    printf("\n   3 : рекурсивным ");
    printf("\n  => ");scanf("%i",&num);
    a=(double**)malloc(n*sizeof(double*));
    for(i=0;i<n;i++)    //
        a[i]=(double*)malloc(n*sizeof(double)); // ўл¤Ґ«Ґ*ЁҐ *г¦*®Ј® Є®«-ў* Ї*¬пвЁ
 
    printf("\nисходнные данные: n= %i",n);
    printf("\nk= %i",k=k-1);
    printf("\n\n  матрица :\n");
    form_matr(a,n);
    print_matr(a,n);
    switch(num){  //--ўлЎ®а Ё§ бЇЁбЄ*--
        case(1) : selsort(a,n,k); break; 
        case(2) : bubsort(a,n,k); break;
        case(3) : qusort(a,0,n-1); break;}
    if(num==1) printf("\nметод простого выбора* :\n");
        else
        if(num==2) printf("\nметод пузырька* :\n");
            else printf("\n рекурсивный метод:\n");
    print_matr(a,n);
    printf("\n число обменов = %i",co);
    printf("  число проверок = %i \n",cp);
    free(a);
    for(i=0;i<n;i++) free(a[i]);
    getchar();
    getchar();
}//---------------------------------------------------
Добавлено через 1 минуту 49 секунд
не могу понять почему не сортирует, помогите найти ошибку в коде. необходимо рассортировать по возрастанию заданную k строку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2009, 20:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировка двумерного массива (C++):

Сортировка двумерного массива - C++
Подскажите как отсортировать двумерный массив по возрастанию. Например дан такой массив двумерный: 9 7 4 1 2 3 5 5 5 Должен...

Сортировка двумерного массива - C++
Input sample: 4 10 20 30 7 30 00 23 59 59 13 30 30 Output sample: 7 30 0 10 20 30

Сортировка двумерного массива - C++
Задача: Написать код сортировки двумерного массива размерностью m*n. Переставить строки матрицы так, чтобы элементы k-го столбца были...

Сортировка двумерного массива - C++
25) В каждой строке матрицы A(n, n) найти наибольший элемент и поменять его местами с соответствующим диагональным элементом. #include...

Сортировка двумерного массива - C++
Не могу разобраться как в матрице можно сортировать элементы,после тяжёлого дня мысли уже улетучиваются... Нужно упорядочить средние...

Сортировка двумерного массива - C++
Добрый день. Дано было такое задание . &quot;Даны два числа n и m. Создать матрицу размером и заполнить случайными числами в диапазоне ....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NickA
35 / 34 / 2
Регистрация: 28.04.2009
Сообщений: 67
29.04.2009, 21:57 #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
//----------------------------------------------------
void selsort(double **a, int n, int k) { // ñîðòèðîâêГ* ìåòîäîì ïðîñòîãî âûáîðГ*
  double x; int v, i,j;
  co=0; cp=0;
  for(i=0;i<n;i++){
    v=i;
    x=a[k][i];
    for(j=i+1;j<n;j++){
      cp++;
      if (fabs(a[k][j])<fabs(x)){
        v=j;
        x=a[k][j];
      };
    };
    a[k][v]=a[k][i];
    a[k][i]=x;
    co++;
  };
};
//----------------------------------------------------
void bubsort(double **a, int n,int k){ //ñîðòèðîâêГ* ïóçûðüêîì
double x; int i,j;
    co=0; cp=0;
     for(i=0;i<n;i++){
            for(j=n-1;j>i;j--){
                 cp++;
                 if(fabs(a[k][j-1])>fabs(a[k][j])){
                   x=a[k][j-1];
                   a[k][j-1]=a[k][j];
                   a[k][j]=x;
                   co++;
                 };
            };
     };
 
};
//----------------------------------------------------
и память нужно очищать немного подругому:
C++
1
2
3
for(i=0;i<n;i++)
      free(a[i]);
free(a);
Salamnov
4 / 4 / 0
Регистрация: 29.03.2009
Сообщений: 37
29.04.2009, 22:12  [ТС] #3
спасибо большое, я так понял я не правильно циклы закрывал
NickA
35 / 34 / 2
Регистрация: 28.04.2009
Сообщений: 67
29.04.2009, 22:22 #4
Цитата Сообщение от Salamnov Посмотреть сообщение
спасибо большое, я так понял я не правильно циклы закрывал
В методе пузытька со счетчиками проблема была
В методе простого выбора с циклами
С памятью аккуратнее, в одном порядке выделяем, в обратном очищаем иначе критическая ошибка будет.
Nеx
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 9
11.05.2009, 21:26 #5
А кто-нибудь может помочь отсортировать предпоследний столбик, для нахождения трех мин.значений?

Добавлено через 11 минут 2 секунды
Правда надо сделать в С.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2009, 21:26
Привет! Вот еще темы с ответами:

Сортировка двумерного массива - C++
Здравствуйте, вот у меня есть массив array. Какими стандартными методами можно отсортировать весь массив по ячейкам ? Или стандартными...

Сортировка Двумерного массива - C++
Создать двумерный массив. Отсортировать каждую строку по возрастанию. Одномерный смог отсортировать а.двух мерный слабо =( ...

сортировка двумерного массива - C++
Помогите с задачей,плииз! упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой...

Сортировка двумерного массива - C++
Есть задачка с 3-ох пунктов. Первый я сделал(создать многомерный целочисельный масив заданый пользователем). А вот с двумя никак не могу...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.05.2009, 21:26
Ответ Создать тему
Опции темы

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