请用【c】帮我写一段给定五个整数从小到大排序,包含六个测试用例,对于每个测试用例输入站一行,并帮我讲解下实现逻辑
时间: 2024-10-11 17:17:18 浏览: 29
好的,这里是一个简单的 C 语言程序,用于实现快速排序算法并处理五个整数的排序。这个算法采用了分治策略,先选择一个基准值(这里通常选择第一个元素),然后将数组分为两部分,一部分包含所有小于基准的元素,另一部分包含所有大于等于基准的元素,最后递归地对这两部分进行排序。
```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[low];
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void quicksort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quicksort(arr, low, pi - 1);
quicksort(arr, pi + 1, high);
}
}
void print_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int test_cases[] = {5, 9, 1, 7, 3, // 测试用例一
8, 6, 4, 2, 10, // 测试用例二
100, 50, 20, 30, 40, // 测试用例三
3, 5, 2, 1, 4, // 测试用例四
1, 5, 7, 2, 4, // 测试用例五
1, 2, 3, 4, 5}; // 测试用例六
int tests = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < tests; i++) {
int arr[] = test_cases[i];
int size = sizeof(arr) / sizeof(arr[0]);
printf("Test Case %d:\n", i + 1);
quicksort(arr, 0, size - 1);
printf("Sorted array: ");
print_array(arr, size);
}
return 0;
}
```
**实现逻辑解释:**
1. `swap` 函数用于交换两个整数的位置。
2. `partition` 函数将数组划分为两半,返回基准值的新位置。
3. `quicksort` 函数递归地对左右两部分进行快速排序,直到整个数组有序。
4. `print_array` 显示排序后的数组。
5. 主函数中,我们创建了六个测试用例,每个测试用例都是一个包含五个整数的一维数组。对每个测试用例,首先分配内存、调用排序函数,然后显示结果。
运行这个程序,你会看到每次排序后的结果都按照从低到高的顺序排列。
阅读全文