常见排序算法的C语言实现
工具函数:交换两个变量的值
#include <stdio.h>
//交换两个变量的值
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
冒泡排序实现:
void bubble(int array[], int len)
{
for (int j = 0; j < len; j++)
{
int count = 0;
for (int i = 1; i < len - j; i++)
{
if (array[i - 1] > array[i])
{
swap(array + i - 1, array + i);
count++;
}
}
if (!count)
break;
}
}
快速排序实现:
void quick(int array[], int len)
{
int i = 0;
int j = len - 1;
int flag = 0;
int key = array[0]; // 不恰当的选择方法
while (i != j)
{
while (j > i)
{
if (flag ? array[i] > key : array[j] < key)
{
swap(array + i, array + j);
break;
}
flag ? i++ : j--;
}
flag = !flag;
}
if (i > 1)
quick(array, i);
if (i < len - 2)
quick(array + i + 1, len - 1 - i);
}
排序函数调用示例:
int main(void)
{
//定义数据
// int array[] = {55, 40, 18, 39, 20, 90, 99, 80, 16, 38, 0};
// int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = 10;
//排序
// bubble(array, len);
quick(array, len);
//输出
for (int i = 0; i < len; i++)
printf("%d ", array[i]);
printf("\n");
return 0;
}