常见排序算法的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;
}