冒泡排序算法
源码
#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))
void arr_swap_xor(uint32_t *arr, uint32_t a, uint32_t b)
{
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a] ^ arr[b];
arr[a] = arr[a] ^ arr[b];
}
static void bubbles_ort(uint32_t *arr, uint64_t len, uint8_t monotonicity)
{
uint8_t flag = FALSE;
for (int i = 0; i < len - 1; i++)
{
flag = 1;
for (int j = 0; j < len - 1 - i; j++)
{
if ((monotonicity == TRUE) ? (arr[j] > arr[j + 1]) : (arr[j] < arr[j + 1]))
{
arr_swap_xor(arr, j, j + 1);
flag = FALSE;
}
}
if (flag == TRUE)
{
break;
}
else
{
}
}
}
int main()
{
#define ARR_MAX 10
static uint32_t arr[ARR_MAX];
for (int i = 0; i < ARR_MAX; i++)
{
arr[i] = rand();
printf("%d ", arr[i]);
}
printf("\r\n");
bubbles_ort(arr, ARR_MAX, TRUE);
for (int i = 0; i < ARR_MAX; i++)
{
printf("%d ", arr[i]);
}
printf("\r\n");
bubbles_ort(arr, ARR_MAX, FALSE);
for (int i = 0; i < ARR_MAX; i++)
{
printf("%d ", arr[i]);
}
printf("\r\n");
}
验证