用C语言编写程序,将一个数组中的元素逆序存放

img


将一个数组中的元素逆序存放
例如原来顺序为12 3 11 14
逆序后为14 11 3 12


#include <stdio.h>

void reverse_array(int arr[], int n) {
    int temp;
    for (int i = 0; i < n / 2; i++) {
        temp = arr[i];
        arr[i] = arr[n - i - 1];
        arr[n - i - 1] = temp;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("Original Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    reverse_array(arr, n);

    printf("\nReversed Array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

定义了一个reverse_array函数,接受一个整数类型的数组和数组的大小作为参数,并将数组中的元素逆序存放。主函数创建一个示例数组,并调用reverse_array函数来反转该数组。最后,程序输出原始数组和反转后数组的内容。
如若需要自定义数组内容,添加scanf即可

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7608505
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言-使用程序产生1~12(包括1和12)的一个数,然后输出对应得月份天数(2月按28天算) 与 猴子吃桃问题
  • 除此之外, 这篇博客: 用C语言完整实现12种排序方法中的 6.鸡尾酒排序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 思路:选择排序的一种改进,一次循环直接找到最大值和最小值的位置,把最大值和最后一个元素进行交换,最小值和最前一个元素进行交换,所以最外层的循环只需要执行len/2次即可
    时间复杂度:O(n^2) 稳定性:不稳定的算法
    代码实现:

    void cocktail_sort(int arr[],size_t len){
    	size_t i,j;
    	for(i=0;i<len/2;i++){
    		int max = i;	//最大值下标
    		int min = i;	//最小值下标
    		for(j=i+1;j<len-i;j++){
    			if(arr[max]<arr[j]){	//找到最大值下标
    				max = j;	
    			}	
    			if(arr[min]>arr[j]){	//找到最小值下标
    				min = j;	
    			}
    		}
    		if(max!=j-1){
    			swap(&arr[max],&arr[j-1]);		//交换最大值和未进行排序的最后一个元素
    		}
    		if(min == j-1){	//如果最小值在未进行排序的最后一个位置,那么经过最大值的交换,已经交换到了最大值所在的位置
    			min = max;		//把最小值的坐标进行改变
    		}
    		if(min!=i){
    			swap(&arr[i],&arr[min]);	//交换最小值和未进行排序的最前的元素
    		}
    	}
    }
    
  • 您还可以看一下 张景平老师的C语言零基础入门(计算机二级考试)课程中的 06-08 查找数组中的元素小节, 巩固相关知识点