源码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#define DEBUG_SWITCH 1
#if DEBUG_SWITCH
#define DEBUG_INFO(format, ...) printf("LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG_INFO(format, ...)
#endif
#define TRUE 1
#define FALSE 0
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned long int uint32_t;
typedef unsigned long long int uint64_t;
#define ARR_SIZE(arr,type) (sizeof(arr)/sizeof(type))
static void quick_sort(int *arr, int low, int high, uint8_t monotonicity)
{
if (low < high)
{
int i = low;
int j = high;
int k = arr[low];
while (i < j)
{
while ((i < j) && ((monotonicity) ? (arr[j] >= k) : (arr[j] <= k)))
{
j--;
}
if (i < j)
{
arr[i++] = arr[j];
}
while ((i < j) && ((monotonicity) ? (arr[i] < k) : (arr[i] > k)))
{
i++;
}
if (i < j)
{
arr[j--] = arr[i];
}
}
arr[i] = k;
quick_sort(arr, low, i - 1, monotonicity);
quick_sort(arr, i + 1, high, monotonicity);
}
}
int main()
{
static int arr[20];
for (uint32_t i = 0; i < ARR_SIZE(arr, int); i++)
{
arr[i] = rand();
printf("%d ", arr[i]);
}
printf("\r\n");
quick_sort(arr, 0, ARR_SIZE(arr, int) - 1, TRUE);
for (uint32_t i = 0; i < ARR_SIZE(arr, int); i++)
{
printf("%d ", arr[i]);
}
printf("\r\n");
quick_sort(arr, 0, ARR_SIZE(arr, int) - 1, FALSE);
for (uint32_t i = 0; i < ARR_SIZE(arr, int); i++)
{
printf("%d ", arr[i]);
}
printf("\r\n");
}
验证
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/def5065f3c9009942b0ac531437d2f9c.png)