Правда на С, а не С++. Если нужно непосредственно на С++, то отпишитесь, исправим.
| Код | #include <stdio.h> #include <stdlib.h> #include <time.h>
//----------------------------------------------// int** Create(int*** arr, size_t size) { *arr = malloc(sizeof(int*) * size);
size_t i;
for (i = 0; i < size; ++i) { (*arr)[i] = malloc(sizeof(int) * size); }
return *arr; } //----------------------------------------------// void Free(int*** arr, size_t size) { size_t i;
for (i =0; i < size; ++i) { free((*arr)[i]); } free(*arr);
*arr = NULL; } //----------------------------------------------// int** Random(int** arr, size_t size) { srand(time(NULL));
size_t i, j;
for (i = 0; i < size; ++i) { for (j = 0; j < size; ++j) { arr[i][j] = rand() % 100; } }
return arr; } //----------------------------------------------// void Print(int** arr, size_t size) { size_t i, j;
for (i = 0; i < size; ++i) { for (j = 0; j < size; ++j) { printf("%3d", arr[j][i]); } printf("\n"); } } //----------------------------------------------// void Swap(int* a, int* b) { int buff = *a; *a = *b; *b = buff; } //----------------------------------------------// void Sort(int* arr, size_t begin, size_t end) { size_t i, j;
for (i = begin; i < end-1; ++i) { int min = i; for (j = i+1; j < end; ++j) { if (arr[j] < arr[min]) { min = j; } } Swap(&arr[min], &arr[i]); } } //----------------------------------------------// void RhombusSort(int** arr, size_t size) { size_t i;
size_t hfsize = (size-1) / 2;
for (i = 0; i <= hfsize; ++i) { size_t begin = hfsize - i; size_t end = size - begin;
Sort(arr[i], begin, end); Sort(arr[size-i-1], begin, end); } } //----------------------------------------------//
int main() { size_t size = 0;
printf("size: "); scanf("%u", &size);
int** arr = NULL;
Create(&arr, size); Random(arr, size);
Print(arr, size); printf("\n");
RhombusSort(arr, size);
Print(arr, size);
Free(&arr, size);
system("pause");
return 0; }
|
http://s2.ipicture.ru/ |