С помощью 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
Поскольку Ed отметил в комментариях, указанные выше методы не ищут окончания шаблон. Один из способов сделать это, который не был рассмотрен другими ответами, - с getline
(обратите внимание, что существуют некоторые оговорки с awk getline):
В одной строке:
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);
}
}
}
Все, что я следую из приведенных выше примеров, представляет собой реализацию сортировки Exchange.
Сортировка обмена по внешнему циклу проверяет каждую запись в таблице на первый элемент, обмениваясь при необходимости. В конце внутреннего цикла нижний элемент находится в позиции 1, затем он начинается с позиции 2, сравнивая его с остальными элементами и делая обмен. Даже если массив уже был в порядке, сортировка не может остановиться. Он должен делать n * (n-1). Массив из 50 элементов, уже отсортированных, будет выполнять сравнения 50 * 49.
Сорт пузыря работает по-разному
устанавливает флаг свопинга в ноль. Затем сдвиньте вдоль массива, сравнивая положение (i) с положением (i + 1). Если происходит своп, вы снова выполните сортировку.
здесь есть некоторый псевдокод.
Вышеупомянутая информация относится к сортировке пузырьков.
Примечание. если данные в порядке, отсутствует своп, и нет второго цикла. Алгоритм сортировки может выйти раньше.
, если массив из пятидесяти элементов упорядочен, сортировка выполнила бы 50 сравнений и остановилась бы. Биржевая сортировка, описанная ранее, должна была бы делать сравнения 50 * 49 или 2450.
уверен, что ваша проблема связана с вашим алгоритмом, попробуйте имитировать алгоритм в ручке и бумаге. это поможет вашему пониманию вашего кода и алгоритма лучше:)
для вашего удобства здесь я включаю алгоритм сортировки пузыря, который я сделал некоторое время назад
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;
}
}
}
}
Надеюсь, это помогает
// 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]);
}
checkBigger(arr, num, number);
внутренний циклnum
иnumber
всегда одинаковое значение. – BLUEPIXY 15 July 2013 в 15:08