有一道题目:
将一个数组中的值逆序重新存放。如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8
第一想法就是使用指针从后向前指然后放到新数组中。
#include <stdio.h>
void bubble_sort(int* arr, int len);
int* reverse(int* arr, int len);
int main()
{
int i;
int arr[] = { 8, 6, 5, 4, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
//若需要有大小顺序的就需要排序:
//bubble_sort(arr, len);
//从后向前:
int* new_arr = reverse(arr, len);
for (i = 0; i < len; i++)
{
printf("%d ", new_arr[i]);
}
return 0;
}
void bubble_sort(int* arr, int len)
{
int i, j;
for (i = len - 1; i > 0;i--)
{
for (j = 0; j < len - 1;j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
int* reverse(int* arr, int len)
{
int i = len - 1;
int j = 0;
int* new_arr = (int*)malloc(sizeof(int) * len);
while (i >= 0)
{
new_arr[j++] = arr[i--];
}
return new_arr;
}
但是这么做有一个缺陷就是空间复杂度...当然也可以直接在原数组中头尾交换。