程序应该按升序或降序打印数组元素而不会打扰数组,我们不能使用swap或任何临时变量。
print_sort(array, sizeofarray);
答案 0 :(得分:0)
使用数组的指针并使用偏移值来访问数组值。
#include <stdio.h>
int main () {
/* an array with 5 elements */
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *p;
int i;
p = balance;
/* output each array element's value */
printf( "Array values using pointer\n");
for ( i = 0; i < 5; i++ ) {
printf("*(p + %d) : %f\n", i, *(p + i) );
}
printf( "Array values using balance as address\n");
for ( i = 0; i < 5; i++ ) {
printf("*(balance + %d) : %f\n", i, *(balance + i) );
}
return 0;
}
来源:https://www.tutorialspoint.com/cprogramming/c_pointer_to_an_array.htm
答案 1 :(得分:0)
(部分)解决方案。如果数字重复就会中断。
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
static bool is_smallest(const int *array, size_t size, int n, int min)
{
assert(size != 0);
if (size == 1)
{
if (array[0] <= min)
return n > min;
return n <= array[0];
}
return (array[0] <= min ? n > min : n <= array[0]) &&
is_smallest(array + 1, size - 1, n, min);
}
static void print_sort2(const int *array, size_t size, size_t index, int min)
{
if (index >= size)
return;
if (is_smallest(array, size, array[index], min))
{
printf("%d ", array[index]);
print_sort2(array, size, 0, array[index]);
}
else
print_sort2(array, size, index + 1, min);
}
static void print_sort(const int *array, size_t size)
{
print_sort2(array, size, 0, INT_MIN);
printf("\n");
}
int main(void)
{
const int array[] = {-100, 32, -1, 4, 66, 0, -5, -500, 2};
const size_t size = sizeof array / sizeof array[0];
print_sort(array, size);
print_sort((const int []){1, 5, 4, 2, 3}, 5);
print_sort((const int []){1, 2, 3}, 3);
print_sort((const int []){10, -10, 20, 30, 0}, 5);
}