在写排序算法之前,首先先定义一个swap交换函数。
代码如下
/* 定义交换函数 */
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
/* 冒泡排序 */
void BubbleSort(int* arr, int size)
{
for (int i = size - 1; i > 0; i--) /* 进行size-1个循环 */
for (int j = 0; j < i; j++) /* 每次需要交换i-1次 */
if (arr[j] > arr[j + 1])
swap(&arr[j], &arr[j + 1]); /* 将值大的元素通过交换持续后移 */
}
代码如下:
/* 选择排序 */
void SelectionSort(int* arr, int size)
{
int small, flag;
for (int i = 0; i < size - 1; i++)
{
small = i;
flag = i; /* flag作为标志一直后移,将值小元素互换到前面*/
for (int j = i + 1; j < size; j++)
if (arr[small] > arr[j]) small = j; /* 搜寻值小元素的下标 */
swap(&arr[small], &arr[flag]); /* 将值小元素与flag元素互换 */
}
}
/* 插入排序 */
void InsertionSort(int* arr, int size)
{
int flag;
for (int i = 1; i < size; i++)
{
int j = i - 1;
flag = arr[i]; /* flag为插入元素 */
while (j >= 0 && flag < arr[j]) /* 搜寻flag插入位置 */
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = flag; /* 将flag插入到合适位置 */
}
}
/* 快速排序 */
void QuickSort(int* arr, int began, int end)
{
if (began < end) /* 递归结束的标志 */
{
int flag = arr[began]; /* 以第一个元素为flag */
int i = began;
int j = end;
while (i < j)
{
while (i < j && flag < arr[j])
j--; /* 尾部开始搜寻小于flag的元素 */
arr[i] = arr[j];
while (i<j && flag>arr[i])
i++; /* 头部开始搜寻大于flag的元素 */
arr[j] = arr[i];
}
arr[i] = flag; /* 将flag位置固定 */
QuickSort(arr, began, i - 1);
QuickSort(arr, i + 1, end); /* 将数组分为两段,同理递归 */
}
}