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

Сортировать элементы произвольного массива - C++

Восстановить пароль Регистрация
 
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
18.03.2012, 18:56     Сортировать элементы произвольного массива #1
Помогите реализовать программу на Си- Сортировать элементы произвольного массива, имеющие нечетные индексы, по заданному признаку (возрастанию или убыванию).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 18:56     Сортировать элементы произвольного массива
Посмотрите здесь:

C++ Дан одномерный массив состоящий из n целых чисел, надо сортировать элементы по уменьшению
C++ В одномерном массиве сортировать элементы по возрастанию методом пузырька
все отрицательные элементы заменить их квадратами и сортировать по убиванию сделать как функция C++
C++ Выбрать все нечетные элементы произвольного одномерного массива в другой массив
Выберите все четные элементы произвольного одномерного массива в другой массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.03.2012, 19:19     Сортировать элементы произвольного массива #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
//
//  main.cpp
//  test
//
//  Created by Ilya Lavrenov on 3/18/12.
//  Copyright (c) 2012 [email]sandye64@gmail.com[/email]. All rights reserved.
//
 
#include <stdio.h>
#include <stdlib.h>
 
struct a 
{
    int value;
};
 
int comp(void* ar, unsigned int i, unsigned int j)
{
    struct a* arr = (struct a*)ar;
    if (arr[i].value > arr[j].value)
        return 1;
    else 
        if (arr[i].value < arr[j].value)
            return -1;
        return 0;
}
 
int _comp(void* ar, unsigned int i, unsigned int j)
{
    return -comp(ar, i , j);
}
 
void swap(void* ar, unsigned int i, unsigned int j)
{
    struct a* aa = (struct a*)ar;
    struct a tmp = aa[i];
    aa[i] = aa[j];
    aa[j] = tmp;
}
 
void sort(void* a, unsigned int size, int (comp)(void*, unsigned int, unsigned int), 
          void(swap)(void*, unsigned int, unsigned int))
{
    unsigned int iterations = 0;
    int next = 1;
    
    while (next > 0)
    {
        next = -1;
        for (unsigned int i = 0; i < size - 1 - iterations; ++i)
            if (comp(a, i, i + 1) > 0)
            {
                swap(a, i, i + 1);
                next = 1;
            }
        ++iterations;
    }
}
 
#define size 5
 
int main(int argc, const char * argv[])
{
    struct a v[size];
    
    for (unsigned int i = 0; i < size; ++i)
        v[i].value = rand() % 100;
    
    printf("Under\n");
    for (unsigned int i = 0; i < size; ++i)
        printf("%d\n", v[i].value);
 
    sort(v, size, &_comp, &swap);
    printf("After\n");
    for (unsigned int i = 0; i < size; ++i)
        printf("%d\n", v[i].value);
    
    system("Pause");
    return EXIT_SUCCESS;
}
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
18.03.2012, 20:11  [ТС]     Сортировать элементы произвольного массива #3
Microsoft Visual Studio 2008 При компилировании выдает ошибки .
sandye51 ,пожалуйста ,дайте краткие коментарии в коде "понятные для новичка" .
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.03.2012, 20:18     Сортировать элементы произвольного массива #4
все прекрасно работает, на скрине видно
Миниатюры
Сортировать элементы произвольного массива  
EMTEC
18.03.2012, 20:22  [ТС]
  #5

Не по теме:

А че у меня не работае

Не по теме:

Дайте,пожалуйста ,краткие коментарии в коде ,что к чему ,я хочу понять что как работает .

-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2012, 11:04     Сортировать элементы произвольного массива #6
jeka061288, я сортировал именно по индексам т.е первый элемент - это 0 второй элемент - это 1 и т.д. Т.е. если по номерам элементов то в моём цикле сортировке i = 0 если же по индексам то используй алгоритм ниже
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int i,j,n = 0;
    int * arr = 0;
    int SortFlag = -1;//ГЋГІГўГҐГ·Г*ГҐГІ Г§Г* Г*Г*ГЇГ°Г*âëåГ*ГЁГҐ ñîðòèðîâêè
    //0 - ГЇГ® âîçðГ*Г±ГІГ*Г*ГЁГѕ 1 - ГЇГ® óáûâГ*Г*ГЁГѕ
    printf("Enter number of elements : ");
    scanf("%d",&n);
    
    if(!(arr = (int *)malloc(n*sizeof(int))))
        printf("Allocation memory error\n");
    else
    {
        srand(time(0));
        printf("Input array\n");
        for(i = 0; i < n; i++)
            printf("%d ",(arr[i] = rand()%100 - 50));
        printf("\n");
        while(SortFlag != 0 && SortFlag != 1)
        {
            printf("Enter sort flag\n");
            printf("0 - in increasing order\n");
            printf("1 - in decreasing order\n");
            scanf("%d",&SortFlag);
        }
        for(i = 1;     i < n; i++)
        for(j = i + 2; j < n; j++)
        {
            //Г*Г*ГёГҐ ГіГ¬Г*îå óñëîâèå
            if((arr[i] < arr[j]) == SortFlag)
            {
                //ÎáìåГ* ýëåìåГ*òîâ ГЎГҐГ§ ГЎГіГґГҐГ°Г*
                arr[i] = arr[i] + arr[j];
                arr[j] = arr[i] - arr[j];
                arr[i] = arr[i] - arr[j];
            }
        }
        printf("Output array\n");
        for(i = 0; i < n; i++)
            printf("%d ",arr[i]);
        printf("\n");
        free((void *)arr);
    }
    system("pause");
    return 0;
}
Миниатюры
Сортировать элементы произвольного массива   Сортировать элементы произвольного массива  
-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2012, 11:24     Сортировать элементы произвольного массива #7
jeka061288, я посмотрел, сделал одно упущение здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 1; * * i < n; i++)
* * * * * * * * for(j = i + 2; j < n; j++)
надо i = i + 2 и j = j + 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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int i,j,n = 0;
    int * arr = 0;
    int SortFlag = -1;//ГЋГІГўГҐГ·Г*ГҐГІ Г§Г* Г*Г*ГЇГ°Г*âëåГ*ГЁГҐ ñîðòèðîâêè
    //0 - ГЇГ® âîçðГ*Г±ГІГ*Г*ГЁГѕ 1 - ГЇГ® óáûâГ*Г*ГЁГѕ
    printf("Enter number of elements : ");
    scanf("%d",&n);
    
    if(!(arr = (int *)malloc(n*sizeof(int))))
        printf("Allocation memory error\n");
    else
    {
        srand(time(0));
        printf("Input array\n");
        for(i = 0; i < n; i++)
            printf("%d ",(arr[i] = rand()%100 - 50));
        printf("\n");
        while(SortFlag != 0 && SortFlag != 1)
        {
            printf("Enter sort flag\n");
            printf("0 - in increasing order\n");
            printf("1 - in decreasing order\n");
            scanf("%d",&SortFlag);
        }
        for(i = 1;     i < n; i = i + 2)
        for(j = i + 2; j < n; j = j + 2)
        {
            //Г*Г*ГёГҐ ГіГ¬Г*îå óñëîâèå
            if((arr[i] < arr[j]) == SortFlag)
            {
                //ÎáìåГ* ýëåìåГ*òîâ ГЎГҐГ§ ГЎГіГґГҐГ°Г*
                arr[i] = arr[i] + arr[j];
                arr[j] = arr[i] - arr[j];
                arr[i] = arr[i] - arr[j];
            }
        }
        printf("Output array\n");
        for(i = 0; i < n; i++)
            printf("%d ",arr[i]);
        printf("\n");
        free((void *)arr);
    }
    system("pause");
    return 0;
}
Миниатюры
Сортировать элементы произвольного массива   Сортировать элементы произвольного массива  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2012, 11:30     Сортировать элементы произвольного массива
Еще ссылки по теме:

Сортировать максимальные элементы матрицы перестановкой C++
Найти минимальные элементы в каждом столбце произвольного двумерного массива и записать их в виде одномерного C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
21.03.2012, 11:30     Сортировать элементы произвольного массива #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 1; * * i < n; i = i + 2)
* * * * * * * * for(j = i + 2; j < n; j = j + 2)
* * * * * * * * {
* * * * * * * * * * * * //наше умное условие
* * * * * * * * * * * * if((arr[i] < arr[j]) == SortFlag)
* * * * * * * * * * * * {
* * * * * * * * * * * * * * * * //Обмен элементов без буфера
* * * * * * * * * * * * * * * * arr[i] = arr[i] + arr[j];
* * * * * * * * * * * * * * * * arr[j] = arr[i] - arr[j];
* * * * * * * * * * * * * * * * arr[i] = arr[i] - arr[j];
* * * * * * * * * * * * }
* * * * * * * * }
- сортировка
Ещё раз повторюсь если нечётные номера элементов i должно быть 0
for(i = 0; i < n; i = i + 2)
Если же как в твоём задании по индексам то единица(т.е. как в коде сейчас)

Не по теме:

PS:

Цитата Сообщение от sandye51 Посмотреть сообщение
все прекрасно работает, на скрине видно
- в C99 нет объявления переменных в цикле http://codepad.org/zs8l5eN1

Yandex
Объявления
21.03.2012, 11:30     Сортировать элементы произвольного массива
Ответ Создать тему
Опции темы

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