Сортировка массива по ссылке внутри функции в C [duplicate]

С помощью GNU awk вы можете установить разделитель записи в регулярное выражение:

Выход:

category 
3
r
d
done

RT - разделитель совместимых записей. Обратите внимание, что запись относительно n будет отключена на единицу, так как первая запись относится к тому, что предшествует первому RS.

Редактировать

Согласно комментарию Эда, это будет не работают, когда у записей есть другие данные между ними, например:

category
1
s
t
done
category
2
n
d
done

foo

category
3
r
d
done

bar
category
4
t
h
done

. Один из способов обойти это - очистить вход с помощью второго (или первого) awk:

Выход:

category 
3
r
d
done

Редактировать 2

Поскольку Ed отметил в комментариях, указанные выше методы не ищут окончания шаблон. Один из способов сделать это, который не был рассмотрен другими ответами, - с getline (обратите внимание, что существуют некоторые оговорки с awk getline):

В одной строке:

-2
задан C_Intermediate_Learner 15 July 2013 в 14:44
поделиться

4 ответа

void sortArray (int arr[], int size)
{
    int num, number, d;

    for(num=0;num<size-1;num++)
    {
        for(d=0; d<size-num-1; d++)
        {
            number=d+1;
            checkBigger(arr, d, number);
        }
    }
}
2
ответ дан BLUEPIXY 21 August 2018 в 10:06
поделиться
  • 1
    Большое спасибо, эта программа отлично работает сейчас =), но я до сих пор не понимаю, почему мы используем d? – C_Intermediate_Learner 15 July 2013 в 15:04
  • 2
    @C_Beginner_Learner checkBigger(arr, num, number); внутренний цикл num и number всегда одинаковое значение. – BLUEPIXY 15 July 2013 в 15:08

Все, что я следую из приведенных выше примеров, представляет собой реализацию сортировки Exchange.

Сортировка обмена по внешнему циклу проверяет каждую запись в таблице на первый элемент, обмениваясь при необходимости. В конце внутреннего цикла нижний элемент находится в позиции 1, затем он начинается с позиции 2, сравнивая его с остальными элементами и делая обмен. Даже если массив уже был в порядке, сортировка не может остановиться. Он должен делать n * (n-1). Массив из 50 элементов, уже отсортированных, будет выполнять сравнения 50 * 49.

Сорт пузыря работает по-разному

устанавливает флаг свопинга в ноль. Затем сдвиньте вдоль массива, сравнивая положение (i) с положением (i + 1). Если происходит своп, вы снова выполните сортировку.

здесь есть некоторый псевдокод.

  1. swap = 0
  2. do {
  3. для (i = o; i & lt; no-elements-1; i ++) {
  4. if (array [i]> array [i + 1])
  5. {
  6. сделать обмен
  7. установить swap = 1
  8. }
  9. / ** /
  10. } while ( swap == 1);

Вышеупомянутая информация относится к сортировке пузырьков.

Примечание. если данные в порядке, отсутствует своп, и нет второго цикла. Алгоритм сортировки может выйти раньше.

, если массив из пятидесяти элементов упорядочен, сортировка выполнила бы 50 сравнений и остановилась бы. Биржевая сортировка, описанная ранее, должна была бы делать сравнения 50 * 49 или 2450.

1
ответ дан Leslie Satenstein 21 August 2018 в 10:06
поделиться
  • 1
    Я написал примерную программу сортировки пузырьков, которая составляет около 20 строк. Я хотел бы прикрепить ее сюда, но я не знаю, как это сделать. – Leslie Satenstein 9 June 2014 в 19:48

уверен, что ваша проблема связана с вашим алгоритмом, попробуйте имитировать алгоритм в ручке и бумаге. это поможет вашему пониманию вашего кода и алгоритма лучше:)

для вашего удобства здесь я включаю алгоритм сортировки пузыря, который я сделал некоторое время назад

void bubbleSort( int a[], int n)
{
    int i,j,temp; // for a={1,2,3,4,5} n is 5

    n = n - 1;    // bcz otherwise it will get out of index

    for(i=0; i<n; i++)
    {
        for(j=0; j<n-i; j++)
        {
            if(a[j]>a[j+1])
            {
                temp = a[j+1];
                a[j+1] = a[j];
               a[j] = temp;
            }

        }

    }

}

Надеюсь, это помогает

1
ответ дан MD Yousuf Azad 21 August 2018 в 10:06
поделиться
  • 1
    Да, спасибо большое, теперь я вижу, что мне нужно использовать d вместо маркировки его num :) – C_Intermediate_Learner 15 July 2013 в 15:08
  • 2
    рад помочь :) – MD Yousuf Azad 15 July 2013 в 15:20
//   BUBBLE SORT.
#include <stdio.h>
#define MAX 20
int main()
{
    int arr[MAX];int no;

    printf("PLEASE ENTER THE CURRENT SIZE OF THE ARRAY\n"); 
    scanf("%d",&no);

    int i;
    printf("PLEASE ENTER THE ELEMENTS OF THE ARRAY\n");
    for(i=0;i<no;i++)
        scanf("%d",&arr[i]);  /*reading the elements*/

    /* sorting begins*/
    int j,k,l;
    int temp;
    int flag=0;

    for(k=0;k<no-1;k++)
        {
        flag=0;
        j=k;
        for(i=0;i<no-j-1;i++)  /* not going to the part that has been sorted*/
        {
            if(arr[i]>arr[i+1])
            {
                flag=1;
                temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;
            }
            else 
                continue;/* not necessary*/
        }
        if(flag==0)  /*implies that the array is alraedy sorted*/
            break;
    }
    printf("THE SORTED LIST:\n\n");
    for(i=0;i<no;i++)
        printf("%d\n",arr[i]);
}
0
ответ дан wscourge 21 August 2018 в 10:06
поделиться
  • 1
    Я НАЧИНАЮЩИЙ. Я ТОЛЬКО НАУЧИЛ АЛГОРИТМАНД, НЕКОТОРЫЕ ИЗМЕНЕНИЯ, КАК МЕНЕДЖМЕНТ В КОММЕНТАРИИ. – mrc_03 21 December 2016 в 11:37
Другие вопросы по тегам:

Похожие вопросы: