Сортировка по количеству повторяемых элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сгенерировать рамдомную матрицу 10*10(используя //randomize()), отсортировать ее по количеству повторяемих елеvентов в каждой строке.напр.1 строка 0 2 6 4 6 0 4 0 6 5 нужно чтоб бьіло: 6 6 6 0 0 0 4 4 5 2 ______________________________ Моих мозгов хватила только на генерацию массива и опредиление количества соответствий\повторений _________________________________________________________________
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include<stdio.h>
#pragma argsused
#include<stdlib.h>
int main(int argc, char* argv[])
{
    int i,j,k, mas[10][10],kilkist_spivpadin[10], spivpadin;
   // randomize();
    //генерування масиву
    for (i=0;i<=9;i++) {
    kilkist_spivpadin[i]=0;
    for (j=0;j<=9;j++){                              // вивід масиву на екран
    mas[i][j]=random(7);
    }
    }
   
    for (i=0;i<=9;i++) {
    for (j=0;j<=9;j++){
    printf("%5d", mas[i][j]);
    }
    printf("\n");
    }
    for (i=0;i<=9;i++)//рухаємося по рядочках
    {
           for (j=0;j<=9;j++) {
               spivpadin=1;
                for (k=j+1;k<=9;k++) {
                 if (mas[i][j]==mas[i][k]) spivpadin++;
                 }
              if (kilkist_spivpadin[i]<spivpadin ) kilkist_spivpadin[i]=spivpadin;
            }
    }
     for (i=0;i<=9;i++) {
     printf("\nspivpadin v %d rjadky%5d", i,kilkist_spivpadin[i]);
     }
     
    scanf("%f",i);
        return 0;
}
//---------------------------------------------------------------------------

Решение задачи: «Сортировка по количеству повторяемых элементов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N  10
 
//сортировка по частоте только от 0-9 значений
void sort_ihz(int* a, int n){
    int i, j, k, c, cs[10], ds[10];
 
    memset(cs, 0, sizeof(cs));
    for(i = 0; i < n; ++i){
        ++cs[a[i]];
        ds[a[i]] = a[i];
    }
 
    //сортировка вставками
    for(i = 1; i < 10; ++i){
        k = ds[i];
        c = cs[i];
        j = i - 1;
        while((j >= 0) && (cs[j] < c)){
            cs[j + 1] = cs[j];
            ds[j + 1] = ds[j];
            --j;
        }
        cs[j + 1] = c;
        ds[j + 1] = k;
    }
 
    for(j = i = 0; i < 10; ++i){
        for(k = 0; k < cs[i]; ++k)
            a[j++] = ds[i];
    }
}
 
int main(void){
    int i, j, m[N][N];
 
    srand((unsigned int)time(NULL));
 
    for(i = 0; i < N; ++i){
        for(j = 0; j < N; ++j)
            m[i][j] = rand() % 10;
    }
 
    for(i = 0; i < N; ++i)
        sort_ihz(m[i], N);
 
    for(i = 0; i < N; ++i){
        for(j = 0; j < N; ++j)
            printf("%d ", m[i][j]);
        putchar('\n');
    }
    return 0;
}

Объяснение кода листинга программы

  1. Предоставленный код реализует сортировку массива по количеству повторяющихся элементов.
  2. В начале кода подключаются необходимые библиотеки для работы с массивами, строками, временем и циклом.
  3. Определяется константа N, которая задает размер массива (в данном случае 10).
  4. Создаются две функции: sort_ihz и main.
  5. Функция sort_ihz принимает на вход массив a и его размер n, и выполняет сортировку по количеству повторяющихся элементов.
  6. Внутри функции sort_ihz создаются массивы cs и ds, которые будут использоваться для подсчета количества повторений и хранения индексов элементов.
  7. С помощью функции memset обнуляются все элементы массива cs.
  8. Происходит заполнение массива cs и ds значениями, подсчитывая количество повторений каждого элемента в массиве a.
  9. Далее происходит сортировка массива ds (по содержанию элементов) с помощью алгоритма сортировки вставками.
  10. После сортировки элементов по количеству повторений, происходит перестановка элементов массива a в соответствии с полученными результатами.
  11. В функции main создается массив m размерностью NxN, который заполняется случайными значениями от 0 до 9.
  12. Затем вызывается функция sort_ihz для каждого подмассива m[i], где i - номер подмассива.
  13. После сортировки выводится отсортированный подмассив на экран.
  14. В конце функции main возвращается 0, что означает успешное выполнение программы.

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы