
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
- •Int main(void){
- •Void sort(int a[],int lt,int rt){
- •Int main(void){
- •Int *a; //массив
Int main(void){
int n=0,i;
scanf("%d",&m);//количество строк, которые будут введены с клавиатуры
gets(buf);
for(i=0;i<m;i++){
t[i]=(char*)malloc(MAXL);
gets(t[i]);
}
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(gets(buf)){//считываем очередную строку из файла, пока не достигнем его конца
if(bad(buf)) continue;//если строка buf плохая, то игнорируем ее
s[n]=(char*)malloc(MAXL);//выделяем память для очередной строки
strcpy(s[n],buf);//копируем туда то, что считали
n++;
}
sort(s,0,n-1);
for(i=0;i<n;i++)
printf("%s\n",s[i]);
return 0; }
№14. #include <stdlib.h>
#include <stdio.h>
#define MAXN 10000
Void sort(int a[],int lt,int rt){
int i=lt,j=rt,x=a[(lt+rt)/2],t;
do{
while(abs(a[i])>abs(x)) i++;//находим следующий, который больше или равен
while(abs(a[j])<abs(x)) j--;//находим следующий, который меньше или равен
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]
i++;j--;
}
}while(i<=j);
if(lt < j) sort(a,lt,j);//сортируем первую половину
if(i < rt) sort(a,i,rt);//сортируем одну половину
//в двух половинах суммарно уже как минимум на 1 элемент меньше!
}
Int main(void){
FILE *in=fopen("input.txt","r");
FILE *out=fopen("output.txt","w");
int i=0,x,sum=0,n;
int *a=(int*)malloc(sizeof(int)*MAXN);
while(fscanf(in,"%d",&x) == 1){
if(x!=sum)
a[i++]=x;
sum+=x;
}
n=i;
sort(a,0,n-1);
for(i=0;i<n;i++)
fprintf(out,"%d ",a[i]);
fprintf(out,"\n");
return 0;
}
№15. #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(int argc, char **argv)
{
int block;
FILE *f;
int *mas;
int k = 0, i;
int * tmp;
int value;
int flag = 0;
mas = NULL;
printf("input block \n");
scanf("%d", &block);
f = fopen("input.txt", "r");
if (f == NULL)
assert(0);
while(fscanf(f, "%d", &value) == 1)
{
if (mas == NULL)
{
mas = (int *)malloc(block*sizeof(int));
mas[0] = value;
k++;
continue;
}
if (k%block == 0)
{
tmp = (int *)realloc(mas, (k + block)*sizeof(int));
if (tmp == NULL)
assert(0);
mas = tmp;
mas[k] = value;
k++;
continue;
}
mas[k] = value;
k++;
}
printf("\n");
for (i = 0; i < k; i++)
printf("%d ", mas[i]);
printf("\n");
while (flag != 1)
{
flag = 1;
for (i = 0; i < k-1; i++)
{
if (mas[i] > mas[i + 1])
{
flag = 0;
value = mas[i];
mas[i] = mas[i+1];
mas[i+1] = value;
}
}
}
printf("after sort\n");
for (i = 0; i < k; i++)
printf("%d ", mas[i]);
printf("\n");
free(mas);
return 0;
}
№16. #include <stdlib.h>
#include <stdio.h>
#include <string.h>
int cnt[256];//сколько раз встретился каждый символ
char a[256];
void sort(char a[],int lt,int rt){
int i=lt,j=rt,x=a[(lt+rt)/2];
char t;
do{
while(cnt[(unsigned)a[i]] < cnt[(unsigned)x] ) i++;//находим следующий, который больше или равен
while(cnt[(unsigned)a[j]] > cnt[(unsigned)x] ) j--;//находим следующий, который меньше или равен
if(i<=j){
t=a[i];a[i]=a[j];a[j]=t;
//когда встретимся (i==j, а этот момент обязвтельно наступит), то удобно сделать i++ и j-- [ключевое слово: обрезать]
i++;j--;
}
}while(i<=j);
if(lt < j) sort(a,lt,j);//сортируем первую половину
if(i < rt) sort(a,i,rt);//сортируем одну половину
//в двух половинах суммарно уже как минимум на 1 элемент меньше!
}