Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 3
Регистрация: 29.03.2009
Сообщений: 37
1

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

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

Author24 — интернет-сервис помощи студентам
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 строку.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2009, 20:26
Ответы с готовыми решениями:

сортировка двумерного массива
помоги отсортировать двумерный массив как в примере пример: 2 4 6 1 2 3...

Сортировка двумерного массива
Дан двумерный массив, размерностью N на N. Надо взять отдельно каждую строку и каждый столбец,...

Сортировка двумерного массива
Нужно отсортировать массив. Мой алгоритм сортирует каждую строку в отдельности. Как отсортировать...

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

4
35 / 34 / 17
Регистрация: 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);
1
5 / 5 / 3
Регистрация: 29.03.2009
Сообщений: 37
29.04.2009, 22:12  [ТС] 3
спасибо большое, я так понял я не правильно циклы закрывал
0
35 / 34 / 17
Регистрация: 28.04.2009
Сообщений: 67
29.04.2009, 22:22 4
Цитата Сообщение от Salamnov Посмотреть сообщение
спасибо большое, я так понял я не правильно циклы закрывал
В методе пузытька со счетчиками проблема была
В методе простого выбора с циклами
С памятью аккуратнее, в одном порядке выделяем, в обратном очищаем иначе критическая ошибка будет.
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 9
11.05.2009, 21:26 5
А кто-нибудь может помочь отсортировать предпоследний столбик, для нахождения трех мин.значений?

Добавлено через 11 минут 2 секунды
Правда надо сделать в С.
0
11.05.2009, 21:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2009, 21:26
Помогаю со студенческими работами здесь

Сортировка двумерного массива
Задача: Написать код сортировки двумерного массива размерностью m*n. Переставить строки матрицы...

Сортировка двумерного массива
Задача состоит в следующем. Есть файл, в который записан двумерный массив размера nxn. Следует...

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

Сортировка двумерного массива
Задание звучит так: &quot;Сформировать двумерный массив целых чисел размерности nxm, где n,m&lt;10 –...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru