#include <stdio.h>
#define arrSize 100
typedef enum {swap_right,swap_left}swap_dir;
void init_arr(int* arr,int size);
void quickSort(int* arr, int size);
void print_arr(int* arr,int size);
int main() {
int arr[arrSize];
printf("请输入%d个整数(绝对值小于100000的整数,便于显示):\n",arrSize);
init_arr(arr, arrSize);
printf("完成输入!!!\n");
printf("开始排序\n");
quickSort(arr, arrSize);
printf("结束排序!!!\n");
printf("开始输出\n");
print_arr(arr, arrSize);
printf("结束输出!!!\n");
return 0;
}
void init_arr(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("请输入第 %d 个整数:",i+1);
scanf("%d",arr+i);
}
}
void quickSort(int* arr, int size) {
if (arr == NULL || size <= 1)
return;
int key_index = 0;
int key_num = arr[key_index];
int front_index = 0;
int back_index = size - 1;
swap_dir dir = swap_right;
while (front_index < back_index) {
if (dir == swap_right) {
if (arr[back_index] < key_num) {
arr[key_index] = arr[back_index];
arr[back_index] = key_num;
key_index = back_index;
front_index++;
dir = swap_left;
}
else {
back_index--;
}
}
else if (dir == swap_left) {
if (arr[front_index] > key_num) {
arr[key_index] = arr[front_index];
arr[front_index] = key_num;
key_index = front_index;
back_index--;
dir = swap_right;
}
else {
front_index++;
}
}
}
if (key_index > 0)
quickSort(arr,key_index);
if (key_index < size -1)
quickSort((arr+key_index + 1),(size - 1 - key_index));
}
void print_arr(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("%5d ",*(arr + i));
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
}
温馨提示:答案为网友推荐,仅供参考