不能实现既可以从小到大又从大到小输出
代码如下:
#include <stdio.h> //定义一个数组,能够输入任意个整型数字,输入回车时停止输入数字,并且输入1时将数字从小到大排序,输入2时将他们从大到小排序。实现快速排序算法对一个整数数组进行从小到大排或从大到小排序。
#include<stdlib.h> //<stdlib.h>头文件中的函数在快速排序算法中起到了随机生成基准元素的作用,提高快排的性能。
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left]; //先将数组的第一个元素作为基准值(即枢轴值) pivot,边界不用定义
int i = left + 1;
int j = right;
while (i <= j) {
if (arr[i] > pivot && arr[j] < pivot) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; //调换
i++;
j--;
} else if (arr[i] <= pivot) { //快速排序的思想是将数组划分为两个子数组,一个小于基准值的子数组和一个大于基准值的子数组,然后递归地对这两个子数组进行排序。
i++;
} else if (arr[j] >= pivot) {
j--;
}
}
arr[left] = arr[j];
arr[j] = pivot;
quickSort(arr, left, j - 1); //快速排序
quickSort(arr, j + 1, right);
}
int main() {
int arr[100];
int num, count = 0;
int choice;
printf("请输入任意个整数(以回车结束):\n");
do { //逐个接收用户输入的整数,并存储到数组 arr 中,同时记录输入的个数 count。直到遇到回车符或者数组达到最大长度
scanf("%d", &num);
arr[count++] = num;
} while (getchar() != '\n' && count < 100);
printf("输入 1 表示从小到大排序,输入 2 表示从大到小排序:");
scanf("%d", &choice);
if (choice == 1) {
quickSort(arr, 0, count - 1); //表示待排序数组的最后一个元素的索引
printf("排序后的数组为:");
for (int i = 0; i < count; i++) {
printf("%d", arr[i]);
if (i != count - 1) { //格式
printf(", ");
}
}
printf("\n");
} else if (choice == 2) {
quickSort(arr,0,count-1);
printf("排序后的数组为:");
for (int i = 0; i < count; i++) {
printf("%d", arr[i]);
if (i != count - 1) {
printf(", ");
}
}
printf("\n");
}else {
printf("无效的选择!\n");
}
return 0;
}
请大家修正一下,急