快速排序和冒泡排序

Posted Fgxr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序和冒泡排序相关的知识,希望对你有一定的参考价值。

记录枯燥的生活,啊哈哈哈哈哈 -_-。。。

工具函数

void swap(int *a,int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}

冒泡

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);
}

最终的测试和结果

#include<stdio.h>
#include<stdlib.h>              //冒泡和快排
void swap(int *a,int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}
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);
}
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;
    }
}
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;
}
结果为:0 1 2 3 4 5 6 7 8 9 

以上是关于快速排序和冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

Scala实现冒泡排序,选择排序和快速排序

凡人能看懂的冒泡排序和快速排序

java冒泡排序和快速排序

nodejs实现冒泡排序和快速排序

冒泡排序与快速排序

冒泡排序与快速排序