编写一个排序函数 void sort(int arr[] ,int num,int flag)实现对传入的包含num 个元素的整型数组arr,进行按特定规则的排序。规则描述为:flag 大于0,升序排序;flag小于0,降序排序;flag等于0保持原数组不变。
时间: 2024-11-30 14:18:57 浏览: 3
在编写这样的排序函数sort(int arr[], int num, int flag)时,可以使用标准的排序算法,如冒泡排序、选择排序、插入排序或者快速排序,根据给定的flag值确定排序的方向。这里我们以一种常见的通用方法为例,使用分治策略,比如快速排序的变体。
```c++
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high, int flag) {
if (flag > 0) { // 升序排序
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot)
i++;
swap(&arr[i], &arr[j]);
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
} else if (flag < 0) { // 降序排序
int pivot = arr[low];
int i = (high + 1);
for (int j = low + 1; j <= high; j++) {
if (arr[j] > pivot)
i--;
swap(&arr[i], &arr[j]);
}
swap(&arr[low], &arr[i]);
return (i - 1);
} else { // 保持原样
return low; // 当flag == 0时,无需交换,直接返回low
}
}
void quickSort(int arr[], int low, int high, int flag) {
if (low < high) {
int pi = partition(arr, low, high, flag);
quickSort(arr, low, pi - 1, flag); // 对左半部分递归排序
quickSort(arr, pi + 1, high, flag); // 对右半部分递归排序
}
}
// 调用函数示例
void sort(int arr[], int num, int flag) {
quickSort(arr, 0, num - 1, flag);
}
```
阅读全文