#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即可
思路:选择排序的一种改进,一次循环直接找到最大值和最小值的位置,把最大值和最后一个元素进行交换,最小值和最前一个元素进行交换,所以最外层的循环只需要执行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]); //交换最小值和未进行排序的最前的元素
}
}
}