用C语言写 小科最近喜欢研究数组,他发现了一个新问题:如何对一个数组的元素排序后平移元素? 设给定原数组为:4 2 3 1 5 8 7 10 6 9 先输入1,则升序排序 1 2 3 4 5 6 7 8 9 10 再输入3,则把前面3个元素平移到数组后面,最终数组元素为4 5 6 7 8 9 10 1 2 3
时间: 2023-05-25 15:06:41 浏览: 79
```
#include <stdio.h>
void sort(int arr[], int len) { //冒泡排序
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void shift(int arr[], int len, int k) { //平移k个元素
int temp[k];
for (int i = 0; i < k; i++) {
temp[i] = arr[i];
}
for (int i = k; i < len; i++) {
arr[i - k] = arr[i];
}
for (int i = 0; i < k; i++) {
arr[len - k + i] = temp[i];
}
}
int main() {
int arr[] = {4, 2, 3, 1, 5, 8, 7, 10, 6, 9};
int len = sizeof(arr) / sizeof(arr[0]);
int option;
printf("请输入选项:1表示升序排序,2表示降序排序\n");
scanf("%d", &option);
if (option == 1) {
sort(arr, len);
printf("排序后的数组为:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
int k;
printf("\n请输入平移的元素数量:");
scanf("%d", &k);
shift(arr, len, k);
printf("平移后的数组为:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
}
return 0;
}
```
阅读全文