用C语言一个数组,写一个程序可以把任何一个位置上值放到适当位置(也就是右边都比这个值大,左边都比这个值小)
时间: 2024-03-15 17:44:30 浏览: 34
这个问题同样可以用快速排序的思想来解决,以下是示例代码:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; ++j) {
if (arr[j] <= pivot) {
++i;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[high]);
return i+1;
}
void quick_sort(int arr[], int low, int high) {
if (low < high) {
int pivot_index = partition(arr, low, high);
quick_sort(arr, low, pivot_index-1);
quick_sort(arr, pivot_index+1, high);
}
}
int main() {
int arr[] = {3, 7, 2, 5, 9, 1, 4, 6, 8};
int n = sizeof(arr) / sizeof(int);
int index = 3; // 要放到适当位置的元素下标
int temp = arr[index];
arr[index] = arr[n-1]; // 先把它放到数组的最后一个位置
arr[n-1] = temp;
quick_sort(arr, 0, n-2); // 排序除了最后一个元素的子数组
for (int i = 0; i < n; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
经过测试,输出结果为:
```
1 2 3 4 5 6 7 8 9
```
可以看到,数组已经被排序了,并且下标为3的元素已经被放到了适当的位置上。
阅读全文